310 def history(ui, repo): |
322 def history(ui, repo): |
311 """show the changelog history""" |
323 """show the changelog history""" |
312 for i in range(repo.changelog.count() - 1, -1, -1): |
324 for i in range(repo.changelog.count() - 1, -1, -1): |
313 show_changeset(ui, repo, rev=i) |
325 show_changeset(ui, repo, rev=i) |
314 |
326 |
|
327 def identify(ui, repo): |
|
328 """print information about the working copy""" |
|
329 (c, a, d, u) = repo.diffdir(repo.root) |
|
330 mflag = (c or a or d or u) and "+" or "" |
|
331 parents = [parent for parent in repo.dirstate.parents() |
|
332 if parent != hg.nullid] |
|
333 if not parents: |
|
334 ui.note("unknown\n") |
|
335 return |
|
336 |
|
337 tstring = '' |
|
338 if not ui.quiet: |
|
339 taglist = [e[1] for e in tags_load(repo)] |
|
340 tstring = " %s" % ' + '.join([e[0] for e in taglist |
|
341 if e[0] != 'tip' and e[1] in parents]) |
|
342 |
|
343 hexfunc = ui.verbose and hg.hex or hg.short |
|
344 pstring = '+'.join([hexfunc(parent) for parent in parents]) |
|
345 ui.write("%s%s%s\n" % (pstring, mflag, tstring)) |
|
346 |
315 def init(ui, source=None): |
347 def init(ui, source=None): |
316 """create a new repository or copy an existing one""" |
348 """create a new repository or copy an existing one""" |
317 |
349 |
318 if source: |
350 if source: |
319 paths = {} |
351 paths = {} |
332 ui.debug("copying by hardlink\n") |
364 ui.debug("copying by hardlink\n") |
333 os.system("cp -al %s/.hg .hg" % source) |
365 os.system("cp -al %s/.hg .hg" % source) |
334 try: |
366 try: |
335 os.remove(".hg/dirstate") |
367 os.remove(".hg/dirstate") |
336 except: pass |
368 except: pass |
|
369 |
|
370 repo = hg.repository(ui, ".") |
|
371 |
337 else: |
372 else: |
338 repo = hg.repository(ui, ".", create=1) |
373 repo = hg.repository(ui, ".", create=1) |
339 other = hg.repository(ui, source) |
374 other = hg.repository(ui, source) |
340 cg = repo.getchangegroup(other) |
375 cg = repo.getchangegroup(other) |
341 repo.addchangegroup(cg) |
376 repo.addchangegroup(cg) |
342 else: |
377 else: |
343 hg.repository(ui, ".", create=1) |
378 repo = hg.repository(ui, ".", create=1) |
|
379 |
|
380 f = repo.opener("hgrc", "w") |
|
381 f.write("[paths]\n") |
|
382 f.write("default = %s\n" % source) |
344 |
383 |
345 def log(ui, repo, f): |
384 def log(ui, repo, f): |
346 """show the revision history of a single file""" |
385 """show the revision history of a single file""" |
347 f = relpath(repo, [f])[0] |
386 f = relpath(repo, [f])[0] |
348 |
387 |
407 if files: |
446 if files: |
408 if os.system("patch -p%d < %s %s" % (strip, pf, quiet)): |
447 if os.system("patch -p%d < %s %s" % (strip, pf, quiet)): |
409 raise "patch failed!" |
448 raise "patch failed!" |
410 repo.commit(files, text) |
449 repo.commit(files, text) |
411 |
450 |
412 def pull(ui, repo, source): |
451 def pull(ui, repo, source="default"): |
413 """pull changes from the specified source""" |
452 """pull changes from the specified source""" |
414 paths = {} |
453 paths = {} |
415 for name, path in ui.configitems("paths"): |
454 for name, path in ui.configitems("paths"): |
416 paths[name] = path |
455 paths[name] = path |
417 |
456 |
455 else: |
494 else: |
456 r = os.system(cmd) |
495 r = os.system(cmd) |
457 os.kill(child, signal.SIGTERM) |
496 os.kill(child, signal.SIGTERM) |
458 return r |
497 return r |
459 |
498 |
460 def rawcommit(ui, repo, files, **rc): |
499 def rawcommit(ui, repo, flist, **rc): |
461 "raw commit interface" |
500 "raw commit interface" |
462 |
501 |
463 text = rc['text'] |
502 text = rc['text'] |
464 if not text and rc['logfile']: |
503 if not text and rc['logfile']: |
465 try: text = open(rc['logfile']).read() |
504 try: text = open(rc['logfile']).read() |
466 except IOError: pass |
505 except IOError: pass |
467 if not text and not rc['logfile']: |
506 if not text and not rc['logfile']: |
468 print "missing commit text" |
507 print "missing commit text" |
469 return 1 |
508 return 1 |
470 |
509 |
471 files = relpath(repo, files) |
510 files = relpath(repo, flist) |
472 if rc['files']: |
511 if rc['files']: |
473 files += open(rc['files']).read().splitlines() |
512 files += open(rc['files']).read().splitlines() |
474 |
513 |
475 repo.rawcommit(files, text, rc['user'], rc['date'], *rc['parent']) |
514 repo.rawcommit(files, text, rc['user'], rc['date'], *rc['parent']) |
476 |
515 |
503 for f in d: print "R", f |
542 for f in d: print "R", f |
504 for f in u: print "?", f |
543 for f in u: print "?", f |
505 |
544 |
506 def tags(ui, repo): |
545 def tags(ui, repo): |
507 """list repository tags""" |
546 """list repository tags""" |
508 repo.lookup(0) # prime the cache |
547 n = tags_load(repo) |
509 i = repo.tags.items() |
|
510 n = [] |
|
511 for e in i: |
|
512 try: |
|
513 l = repo.changelog.rev(e[1]) |
|
514 except KeyError: |
|
515 l = -2 |
|
516 n.append((l, e)) |
|
517 |
548 |
518 n.sort() |
549 n.sort() |
519 n.reverse() |
550 n.reverse() |
520 i = [ e[1] for e in n ] |
551 i = [ e[1] for e in n ] |
521 for k, n in i: |
552 for k, n in i: |
581 "export": (export, [], "hg export <changeset>"), |
612 "export": (export, [], "hg export <changeset>"), |
582 "forget": (forget, [], "hg forget [files]"), |
613 "forget": (forget, [], "hg forget [files]"), |
583 "heads": (heads, [], 'hg heads'), |
614 "heads": (heads, [], 'hg heads'), |
584 "history": (history, [], 'hg history'), |
615 "history": (history, [], 'hg history'), |
585 "help": (help, [], 'hg help [command]'), |
616 "help": (help, [], 'hg help [command]'), |
|
617 "identify|id": (identify, [], 'hg identify'), |
586 "init": (init, [], 'hg init [url]'), |
618 "init": (init, [], 'hg init [url]'), |
587 "log": (log, [], 'hg log <file>'), |
619 "log": (log, [], 'hg log <file>'), |
588 "manifest|dumpmanifest": (manifest, [], 'hg manifest [rev]'), |
620 "manifest|dumpmanifest": (manifest, [], 'hg manifest [rev]'), |
589 "parents": (parents, [], 'hg parents [node]'), |
621 "parents": (parents, [], 'hg parents [node]'), |
590 "patch|import": (patch, |
622 "patch|import": (patch, |
625 norepo = "init branch help debugindex debugindexdot" |
657 norepo = "init branch help debugindex debugindexdot" |
626 |
658 |
627 def find(cmd): |
659 def find(cmd): |
628 i = None |
660 i = None |
629 for e in table.keys(): |
661 for e in table.keys(): |
630 if re.match(e + "$", cmd): |
662 if re.match("(%s)$" % e, cmd): |
631 return table[e] |
663 return table[e] |
632 |
664 |
633 raise UnknownCommand(cmd) |
665 raise UnknownCommand(cmd) |
634 |
666 |
635 class SignalInterrupt(Exception): pass |
667 class SignalInterrupt(Exception): pass |