Show More
@@ -272,8 +272,6 b' def clone(ui, source, dest = None, **opt' | |||
|
272 | 272 | """make a copy of an existing repository""" |
|
273 | 273 | source = ui.expandpath(source) |
|
274 | 274 | |
|
275 | success = False | |
|
276 | ||
|
277 | 275 | if dest is None: |
|
278 | 276 | dest = os.path.basename(os.path.normpath(source)) |
|
279 | 277 | |
@@ -281,45 +279,50 b' def clone(ui, source, dest = None, **opt' | |||
|
281 | 279 | ui.warn("abort: destination '%s' already exists\n" % dest) |
|
282 | 280 | return 1 |
|
283 | 281 | |
|
284 | os.mkdir(dest) | |
|
285 | ||
|
286 | try: | |
|
287 | link = 0 | |
|
288 | if not source.startswith("http://"): | |
|
289 | d1 = os.stat(dest).st_dev | |
|
290 | d2 = os.stat(source).st_dev | |
|
291 | if d1 == d2: link = 1 | |
|
282 | class dircleanup: | |
|
283 | def __init__(self, dir): | |
|
284 | self.dir = dir | |
|
285 | os.mkdir(dir) | |
|
286 | def close(self): | |
|
287 | self.dir = None | |
|
288 | def __del__(self): | |
|
289 | if self.dir: | |
|
290 | import shutil | |
|
291 | shutil.rmtree(self.dir, True) | |
|
292 | 292 | |
|
293 | if link: | |
|
294 | ui.note("copying by hardlink\n") | |
|
295 | util.system("cp -al '%s'/.hg '%s'/.hg" % (source, dest)) | |
|
296 | try: | |
|
297 | os.remove(os.path.join(dest, ".hg", "dirstate")) | |
|
298 | except: pass | |
|
293 | d = dircleanup(dest) | |
|
299 | 294 | |
|
300 | repo = hg.repository(ui, dest) | |
|
295 | link = 0 | |
|
296 | if not source.startswith("http://"): | |
|
297 | d1 = os.stat(dest).st_dev | |
|
298 | d2 = os.stat(source).st_dev | |
|
299 | if d1 == d2: link = 1 | |
|
301 | 300 | |
|
302 | else: | |
|
303 | repo = hg.repository(ui, dest, create=1) | |
|
304 | other = hg.repository(ui, source) | |
|
305 | fetch = repo.findincoming(other) | |
|
306 | if fetch: | |
|
307 | cg = other.changegroup(fetch) | |
|
308 | repo.addchangegroup(cg) | |
|
301 | if link: | |
|
302 | ui.note("copying by hardlink\n") | |
|
303 | util.system("cp -al '%s'/.hg '%s'/.hg" % (source, dest)) | |
|
304 | try: | |
|
305 | os.remove(os.path.join(dest, ".hg", "dirstate")) | |
|
306 | except: pass | |
|
307 | ||
|
308 | repo = hg.repository(ui, dest) | |
|
309 | 309 | |
|
310 | f = repo.opener("hgrc", "w") | |
|
311 | f.write("[paths]\n") | |
|
312 | f.write("default = %s\n" % source) | |
|
313 | ||
|
314 | if not opts['noupdate']: | |
|
315 | update(ui, repo) | |
|
310 | else: | |
|
311 | repo = hg.repository(ui, dest, create=1) | |
|
312 | other = hg.repository(ui, source) | |
|
313 | fetch = repo.findincoming(other) | |
|
314 | if fetch: | |
|
315 | cg = other.changegroup(fetch) | |
|
316 | repo.addchangegroup(cg) | |
|
316 | 317 | |
|
317 | success = True | |
|
318 | f = repo.opener("hgrc", "w") | |
|
319 | f.write("[paths]\n") | |
|
320 | f.write("default = %s\n" % source) | |
|
318 | 321 | |
|
319 | finally: | |
|
320 | if not success: | |
|
321 | import shutil | |
|
322 | shutil.rmtree(dest, True) | |
|
322 | if not opts['noupdate']: | |
|
323 | update(ui, repo) | |
|
324 | ||
|
325 | d.close() | |
|
323 | 326 | |
|
324 | 327 | def commit(ui, repo, *files, **opts): |
|
325 | 328 | """commit the specified files or all outstanding changes""" |
General Comments 0
You need to be logged in to leave comments.
Login now