Mercurial > public > mercurial-scm > hg
comparison mercurial/hg.py @ 8800:971e38a9344b
add helper function to create shared repos
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Sat, 13 Jun 2009 18:01:47 -0500 |
parents | 2c097e22492c |
children | 8bf6eb68ddaf |
comparison
equal
deleted
inserted
replaced
8799:87d1fd40f57e | 8800:971e38a9344b |
---|---|
78 if path.startswith('file://'): | 78 if path.startswith('file://'): |
79 return path[7:] | 79 return path[7:] |
80 if path.startswith('file:'): | 80 if path.startswith('file:'): |
81 return path[5:] | 81 return path[5:] |
82 return path | 82 return path |
83 | |
84 def share(ui, source, dest, update=True): | |
85 '''create a shared repository''' | |
86 | |
87 if not islocal(source): | |
88 raise util.Abort(_('can only share local repositories')) | |
89 | |
90 if isinstance(source, str): | |
91 origsource = ui.expandpath(source) | |
92 source, rev, checkout = parseurl(origsource, '') | |
93 srcrepo = repository(ui, source) | |
94 else: | |
95 srcrepo = source | |
96 origsource = source = srcrepo.url() | |
97 checkout = None | |
98 | |
99 sharedpath = srcrepo.sharedpath # if our source is already sharing | |
100 | |
101 root = os.path.realpath(dest) | |
102 roothg = os.path.join(root, '.hg') | |
103 | |
104 if os.path.exists(roothg): | |
105 raise util.Abort(_('destination already exists')) | |
106 | |
107 if not os.path.isdir(root): | |
108 os.mkdir(root) | |
109 os.mkdir(roothg) | |
110 | |
111 requirements = '' | |
112 try: | |
113 requirements = srcrepo.opener('requires').read() | |
114 except IOError, inst: | |
115 if inst.errno != errno.ENOENT: | |
116 raise | |
117 | |
118 requirements += 'shared\n' | |
119 file(os.path.join(roothg, 'requires'), 'w').write(requirements) | |
120 file(os.path.join(roothg, 'sharedpath'), 'w').write(sharedpath) | |
121 | |
122 default = srcrepo.ui.config('paths', 'default') | |
123 if default: | |
124 f = file(os.path.join(roothg, 'hgrc'), 'w') | |
125 f.write('[paths]\ndefault = %s\n' % default) | |
126 f.close() | |
127 | |
128 r = repository(ui, root) | |
129 | |
130 if update: | |
131 r.ui.status(_("updating working directory\n")) | |
132 if update is not True: | |
133 checkout = update | |
134 for test in (checkout, 'default', 'tip'): | |
135 try: | |
136 uprev = r.lookup(test) | |
137 break | |
138 except: | |
139 continue | |
140 _update(r, uprev) | |
83 | 141 |
84 def clone(ui, source, dest=None, pull=False, rev=None, update=True, | 142 def clone(ui, source, dest=None, pull=False, rev=None, update=True, |
85 stream=False): | 143 stream=False): |
86 """Make a copy of an existing repository. | 144 """Make a copy of an existing repository. |
87 | 145 |