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']: