##// END OF EJS Templates
Deal with failed clone/transaction interaction...
mpm@selenic.com -
r535:fba26990 default
parent child Browse files
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