Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/commands.py @ 2567:2748253b49c2
Merge context patches
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Wed, 05 Jul 2006 13:28:25 -0500 |
parents | 5b426676f616 d8560b458f76 |
children | 82e3b2966862 83cfd95eafb5 |
comparison
equal
deleted
inserted
replaced
2559:bf67d0f6531c | 2567:2748253b49c2 |
---|---|
246 if rev in seen: | 246 if rev in seen: |
247 continue | 247 continue |
248 seen[rev] = 1 | 248 seen[rev] = 1 |
249 yield str(rev) | 249 yield str(rev) |
250 | 250 |
251 def make_filename(repo, r, pat, node=None, | 251 def make_filename(repo, pat, node, |
252 total=None, seqno=None, revwidth=None, pathname=None): | 252 total=None, seqno=None, revwidth=None, pathname=None): |
253 node_expander = { | 253 node_expander = { |
254 'H': lambda: hex(node), | 254 'H': lambda: hex(node), |
255 'R': lambda: str(r.rev(node)), | 255 'R': lambda: str(repo.changelog.rev(node)), |
256 'h': lambda: short(node), | 256 'h': lambda: short(node), |
257 } | 257 } |
258 expander = { | 258 expander = { |
259 '%': lambda: '%', | 259 '%': lambda: '%', |
260 'b': lambda: os.path.basename(repo.root), | 260 'b': lambda: os.path.basename(repo.root), |
290 return ''.join(newname) | 290 return ''.join(newname) |
291 except KeyError, inst: | 291 except KeyError, inst: |
292 raise util.Abort(_("invalid format spec '%%%s' in output file name"), | 292 raise util.Abort(_("invalid format spec '%%%s' in output file name"), |
293 inst.args[0]) | 293 inst.args[0]) |
294 | 294 |
295 def make_file(repo, r, pat, node=None, | 295 def make_file(repo, pat, node=None, |
296 total=None, seqno=None, revwidth=None, mode='wb', pathname=None): | 296 total=None, seqno=None, revwidth=None, mode='wb', pathname=None): |
297 if not pat or pat == '-': | 297 if not pat or pat == '-': |
298 return 'w' in mode and sys.stdout or sys.stdin | 298 return 'w' in mode and sys.stdout or sys.stdin |
299 if hasattr(pat, 'write') and 'w' in mode: | 299 if hasattr(pat, 'write') and 'w' in mode: |
300 return pat | 300 return pat |
301 if hasattr(pat, 'read') and 'r' in mode: | 301 if hasattr(pat, 'read') and 'r' in mode: |
302 return pat | 302 return pat |
303 return open(make_filename(repo, r, pat, node, total, seqno, revwidth, | 303 return open(make_filename(repo, pat, node, total, seqno, revwidth, |
304 pathname), | 304 pathname), |
305 mode) | 305 mode) |
306 | 306 |
307 def write_bundle(cg, filename=None, compress=True): | 307 def write_bundle(cg, filename=None, compress=True): |
308 """Write a bundle file and return its filename. | 308 """Write a bundle file and return its filename. |
739 def getnode(rev): | 739 def getnode(rev): |
740 return short(repo.changelog.node(rev)) | 740 return short(repo.changelog.node(rev)) |
741 | 741 |
742 ucache = {} | 742 ucache = {} |
743 def getname(rev): | 743 def getname(rev): |
744 cl = repo.changelog.read(repo.changelog.node(rev)) | 744 try: |
745 return trimuser(ui, cl[1], rev, ucache) | 745 return ucache[rev] |
746 except: | |
747 u = trimuser(ui, repo.changectx(rev).user(), rev, ucache) | |
748 ucache[rev] = u | |
749 return u | |
746 | 750 |
747 dcache = {} | 751 dcache = {} |
748 def getdate(rev): | 752 def getdate(rev): |
749 datestr = dcache.get(rev) | 753 datestr = dcache.get(rev) |
750 if datestr is None: | 754 if datestr is None: |
751 cl = repo.changelog.read(repo.changelog.node(rev)) | 755 datestr = dcache[rev] = util.datestr(repo.changectx(rev).date()) |
752 datestr = dcache[rev] = util.datestr(cl[2]) | |
753 return datestr | 756 return datestr |
754 | 757 |
755 if not pats: | 758 if not pats: |
756 raise util.Abort(_('at least one file name or pattern required')) | 759 raise util.Abort(_('at least one file name or pattern required')) |
757 | 760 |
758 opmap = [['user', getname], ['number', str], ['changeset', getnode], | 761 opmap = [['user', getname], ['number', str], ['changeset', getnode], |
759 ['date', getdate]] | 762 ['date', getdate]] |
760 if not opts['user'] and not opts['changeset'] and not opts['date']: | 763 if not opts['user'] and not opts['changeset'] and not opts['date']: |
761 opts['number'] = 1 | 764 opts['number'] = 1 |
762 | 765 |
763 if opts['rev']: | 766 ctx = repo.changectx(opts['rev'] or repo.dirstate.parents()[0]) |
764 node = repo.changelog.lookup(opts['rev']) | |
765 else: | |
766 node = repo.dirstate.parents()[0] | |
767 change = repo.changelog.read(node) | |
768 mmap = repo.manifest.read(change[0]) | |
769 | 767 |
770 for src, abs, rel, exact in walk(repo, pats, opts, node=node): | 768 for src, abs, rel, exact in walk(repo, pats, opts, node=node): |
771 f = repo.file(abs) | 769 fctx = ctx.filectx(abs) |
772 if not opts['text'] and util.binary(f.read(mmap[abs])): | 770 if not opts['text'] and util.binary(fctx.data()): |
773 ui.write(_("%s: binary file\n") % ((pats and rel) or abs)) | 771 ui.write(_("%s: binary file\n") % ((pats and rel) or abs)) |
774 continue | 772 continue |
775 | 773 |
776 lines = f.annotate(mmap[abs]) | 774 lines = fctx.annotate() |
777 pieces = [] | 775 pieces = [] |
778 | 776 |
779 for o, f in opmap: | 777 for o, f in opmap: |
780 if opts[o]: | 778 if opts[o]: |
781 l = [f(n) for n, dummy in lines] | 779 l = [f(n) for n, dummy in lines] |
817 node, p2 = repo.dirstate.parents() | 815 node, p2 = repo.dirstate.parents() |
818 if p2 != nullid: | 816 if p2 != nullid: |
819 raise util.Abort(_('uncommitted merge - please provide a ' | 817 raise util.Abort(_('uncommitted merge - please provide a ' |
820 'specific revision')) | 818 'specific revision')) |
821 | 819 |
822 dest = make_filename(repo, repo.changelog, dest, node) | 820 dest = make_filename(repo, dest, node) |
823 if os.path.realpath(dest) == repo.root: | 821 if os.path.realpath(dest) == repo.root: |
824 raise util.Abort(_('repository root cannot be destination')) | 822 raise util.Abort(_('repository root cannot be destination')) |
825 dummy, matchfn, dummy = matchpats(repo, [], opts) | 823 dummy, matchfn, dummy = matchpats(repo, [], opts) |
826 kind = opts.get('type') or 'files' | 824 kind = opts.get('type') or 'files' |
827 prefix = opts['prefix'] | 825 prefix = opts['prefix'] |
828 if dest == '-': | 826 if dest == '-': |
829 if kind == 'files': | 827 if kind == 'files': |
830 raise util.Abort(_('cannot archive plain files to stdout')) | 828 raise util.Abort(_('cannot archive plain files to stdout')) |
831 dest = sys.stdout | 829 dest = sys.stdout |
832 if not prefix: prefix = os.path.basename(repo.root) + '-%h' | 830 if not prefix: prefix = os.path.basename(repo.root) + '-%h' |
833 prefix = make_filename(repo, repo.changelog, prefix, node) | 831 prefix = make_filename(repo, prefix, node) |
834 archival.archive(repo, dest, node, kind, not opts['no_decode'], | 832 archival.archive(repo, dest, node, kind, not opts['no_decode'], |
835 matchfn, prefix) | 833 matchfn, prefix) |
836 | 834 |
837 def backout(ui, repo, rev, **opts): | 835 def backout(ui, repo, rev, **opts): |
838 '''reverse effect of earlier changeset | 836 '''reverse effect of earlier changeset |
918 | 916 |
919 %s basename of file being printed | 917 %s basename of file being printed |
920 %d dirname of file being printed, or '.' if in repo root | 918 %d dirname of file being printed, or '.' if in repo root |
921 %p root-relative path name of file being printed | 919 %p root-relative path name of file being printed |
922 """ | 920 """ |
923 mf = {} | 921 ctx = repo.changectx(opts['rev'] or -1) |
924 rev = opts['rev'] | 922 for src, abs, rel, exact in walk(repo, (file1,) + pats, opts, ctx.node()): |
925 if rev: | 923 fp = make_file(repo, opts['output'], ctx.node(), pathname=abs) |
926 node = repo.lookup(rev) | 924 fp.write(ctx.filectx(abs).data()) |
927 else: | |
928 node = repo.changelog.tip() | |
929 change = repo.changelog.read(node) | |
930 mf = repo.manifest.read(change[0]) | |
931 for src, abs, rel, exact in walk(repo, (file1,) + pats, opts, node): | |
932 r = repo.file(abs) | |
933 n = mf[abs] | |
934 fp = make_file(repo, r, opts['output'], node=n, pathname=abs) | |
935 fp.write(r.read(n)) | |
936 | 925 |
937 def clone(ui, source, dest=None, **opts): | 926 def clone(ui, source, dest=None, **opts): |
938 """make a copy of an existing repository | 927 """make a copy of an existing repository |
939 | 928 |
940 Create a copy of an existing repository in a new directory. | 929 Create a copy of an existing repository in a new directory. |
1499 if opts['switch_parent']: | 1488 if opts['switch_parent']: |
1500 parents.reverse() | 1489 parents.reverse() |
1501 prev = (parents and parents[0]) or nullid | 1490 prev = (parents and parents[0]) or nullid |
1502 change = repo.changelog.read(node) | 1491 change = repo.changelog.read(node) |
1503 | 1492 |
1504 fp = make_file(repo, repo.changelog, opts['output'], | 1493 fp = make_file(repo, opts['output'], node, total=total, seqno=seqno, |
1505 node=node, total=total, seqno=seqno, | |
1506 revwidth=revwidth) | 1494 revwidth=revwidth) |
1507 if fp != sys.stdout: | 1495 if fp != sys.stdout: |
1508 ui.note("%s\n" % fp.name) | 1496 ui.note("%s\n" % fp.name) |
1509 | 1497 |
1510 fp.write("# HG changeset patch\n") | 1498 fp.write("# HG changeset patch\n") |