Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/commands.py @ 542:eda4c32c167a
Merge with upstream
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Merge with upstream
manifest hash: 78c3657547aa957be685a4d54462570eb4b5e181
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
iD8DBQFCxFpbW7P1GVgWeRoRAqWGAKCkLQPbZpdLCBWKD+pecMtTRiu9EACfbuz4
dtHuM/86dYZ6CRqQHohJVjk=
=v+Vv
-----END PGP SIGNATURE-----
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Thu, 30 Jun 2005 21:47:23 +0100 |
parents | abaea35387a8 fba26990604a |
children | c8ae964109c1 |
comparison
equal
deleted
inserted
replaced
541:abaea35387a8 | 542:eda4c32c167a |
---|---|
230 cl = repo.changelog.read(repo.changelog.node(rev)) | 230 cl = repo.changelog.read(repo.changelog.node(rev)) |
231 name = cl[1] | 231 name = cl[1] |
232 f = name.find('@') | 232 f = name.find('@') |
233 if f >= 0: | 233 if f >= 0: |
234 name = name[:f] | 234 name = name[:f] |
235 f = name.find('<') | |
236 if f >= 0: | |
237 name = name[f+1:] | |
235 bcache[rev] = name | 238 bcache[rev] = name |
236 return name | 239 return name |
237 | 240 |
238 bcache = {} | 241 bcache = {} |
239 opmap = [['user', getname], ['number', str], ['changeset', getnode]] | 242 opmap = [['user', getname], ['number', str], ['changeset', getnode]] |
267 | 270 |
268 def clone(ui, source, dest = None, **opts): | 271 def clone(ui, source, dest = None, **opts): |
269 """make a copy of an existing repository""" | 272 """make a copy of an existing repository""" |
270 source = ui.expandpath(source) | 273 source = ui.expandpath(source) |
271 | 274 |
272 success = False | |
273 | |
274 if dest is None: | 275 if dest is None: |
275 dest = os.path.basename(source) | 276 dest = os.path.basename(os.path.normpath(source)) |
276 if dest == source: | 277 |
277 ui.warn('abort: source and destination are the same\n') | 278 if os.path.exists(dest): |
278 sys.exit(1) | 279 ui.warn("abort: destination '%s' already exists\n" % dest) |
279 | 280 return 1 |
280 os.mkdir(dest) | 281 |
281 | 282 class dircleanup: |
282 try: | 283 def __init__(self, dir): |
283 link = 0 | 284 self.dir = dir |
284 if not (source.startswith("http://") or | 285 os.mkdir(dir) |
285 source.startswith("hg://") or | 286 def close(self): |
286 source.startswith("old-http://")): | 287 self.dir = None |
287 d1 = os.stat(dest).st_dev | 288 def __del__(self): |
288 d2 = os.stat(source).st_dev | 289 if self.dir: |
289 if d1 == d2: link = 1 | 290 import shutil |
290 | 291 shutil.rmtree(self.dir, True) |
291 if link: | 292 |
292 ui.debug("copying by hardlink\n") | 293 d = dircleanup(dest) |
293 util.system("cp -al '%s'/.hg '%s'/.hg" % (source, dest)) | 294 |
294 try: | 295 link = 0 |
295 os.remove(os.path.join(dest, ".hg", "dirstate")) | 296 if not (source.startswith("http://") or |
296 except: pass | 297 source.startswith("hg://") or |
297 | 298 source.startswith("old-http://")): |
298 repo = hg.repository(ui, dest) | 299 d1 = os.stat(dest).st_dev |
299 | 300 d2 = os.stat(source).st_dev |
300 else: | 301 if d1 == d2: link = 1 |
301 repo = hg.repository(ui, dest, create=1) | 302 |
302 other = hg.repository(ui, source) | 303 if link: |
303 fetch = repo.findincoming(other) | 304 ui.note("copying by hardlink\n") |
304 if fetch: | 305 util.system("cp -al '%s'/.hg '%s'/.hg" % (source, dest)) |
305 cg = other.changegroup(fetch) | 306 try: |
306 repo.addchangegroup(cg) | 307 os.remove(os.path.join(dest, ".hg", "dirstate")) |
307 | 308 except: pass |
308 f = repo.opener("hgrc", "w") | 309 |
309 f.write("[paths]\n") | 310 repo = hg.repository(ui, dest) |
310 f.write("default = %s\n" % source) | 311 |
311 | 312 else: |
312 if not opts['noupdate']: | 313 repo = hg.repository(ui, dest, create=1) |
313 update(ui, repo) | 314 other = hg.repository(ui, source) |
314 | 315 fetch = repo.findincoming(other) |
315 success = True | 316 if fetch: |
316 | 317 cg = other.changegroup(fetch) |
317 finally: | 318 repo.addchangegroup(cg) |
318 if not success: | 319 |
319 import shutil | 320 f = repo.opener("hgrc", "w") |
320 shutil.rmtree(dest, True) | 321 f.write("[paths]\n") |
322 f.write("default = %s\n" % source) | |
323 | |
324 if not opts['noupdate']: | |
325 update(ui, repo) | |
326 | |
327 d.close() | |
321 | 328 |
322 def commit(ui, repo, *files, **opts): | 329 def commit(ui, repo, *files, **opts): |
323 """commit the specified files or all outstanding changes""" | 330 """commit the specified files or all outstanding changes""" |
324 text = opts['text'] | 331 text = opts['text'] |
325 if not text and opts['logfile']: | 332 if not text and opts['logfile']: |