Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/commands.py @ 2562:a020024c5870
simplify make_filename, fix hg cat bug
hg cat was using file-level rev/node ids for generating filename
templates. This simplifies make_filename to only use changeset
rev/node ids.
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Wed, 28 Jun 2006 17:06:56 -0500 |
parents | 73ac95671788 |
children | 7f78ca2c7977 |
comparison
equal
deleted
inserted
replaced
2561:494f7787d8ee | 2562:a020024c5870 |
---|---|
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. |
777 node, p2 = repo.dirstate.parents() | 777 node, p2 = repo.dirstate.parents() |
778 if p2 != nullid: | 778 if p2 != nullid: |
779 raise util.Abort(_('uncommitted merge - please provide a ' | 779 raise util.Abort(_('uncommitted merge - please provide a ' |
780 'specific revision')) | 780 'specific revision')) |
781 | 781 |
782 dest = make_filename(repo, repo.changelog, dest, node) | 782 dest = make_filename(repo, dest, node) |
783 if os.path.realpath(dest) == repo.root: | 783 if os.path.realpath(dest) == repo.root: |
784 raise util.Abort(_('repository root cannot be destination')) | 784 raise util.Abort(_('repository root cannot be destination')) |
785 dummy, matchfn, dummy = matchpats(repo, [], opts) | 785 dummy, matchfn, dummy = matchpats(repo, [], opts) |
786 kind = opts.get('type') or 'files' | 786 kind = opts.get('type') or 'files' |
787 prefix = opts['prefix'] | 787 prefix = opts['prefix'] |
788 if dest == '-': | 788 if dest == '-': |
789 if kind == 'files': | 789 if kind == 'files': |
790 raise util.Abort(_('cannot archive plain files to stdout')) | 790 raise util.Abort(_('cannot archive plain files to stdout')) |
791 dest = sys.stdout | 791 dest = sys.stdout |
792 if not prefix: prefix = os.path.basename(repo.root) + '-%h' | 792 if not prefix: prefix = os.path.basename(repo.root) + '-%h' |
793 prefix = make_filename(repo, repo.changelog, prefix, node) | 793 prefix = make_filename(repo, prefix, node) |
794 archival.archive(repo, dest, node, kind, not opts['no_decode'], | 794 archival.archive(repo, dest, node, kind, not opts['no_decode'], |
795 matchfn, prefix) | 795 matchfn, prefix) |
796 | 796 |
797 def backout(ui, repo, rev, **opts): | 797 def backout(ui, repo, rev, **opts): |
798 '''reverse effect of earlier changeset | 798 '''reverse effect of earlier changeset |
889 change = repo.changelog.read(node) | 889 change = repo.changelog.read(node) |
890 mf = repo.manifest.read(change[0]) | 890 mf = repo.manifest.read(change[0]) |
891 for src, abs, rel, exact in walk(repo, (file1,) + pats, opts, node): | 891 for src, abs, rel, exact in walk(repo, (file1,) + pats, opts, node): |
892 r = repo.file(abs) | 892 r = repo.file(abs) |
893 n = mf[abs] | 893 n = mf[abs] |
894 fp = make_file(repo, r, opts['output'], node=n, pathname=abs) | 894 fp = make_file(repo, opts['output'], node, pathname=abs) |
895 fp.write(r.read(n)) | 895 fp.write(r.read(n)) |
896 | 896 |
897 def clone(ui, source, dest=None, **opts): | 897 def clone(ui, source, dest=None, **opts): |
898 """make a copy of an existing repository | 898 """make a copy of an existing repository |
899 | 899 |
1441 if opts['switch_parent']: | 1441 if opts['switch_parent']: |
1442 parents.reverse() | 1442 parents.reverse() |
1443 prev = (parents and parents[0]) or nullid | 1443 prev = (parents and parents[0]) or nullid |
1444 change = repo.changelog.read(node) | 1444 change = repo.changelog.read(node) |
1445 | 1445 |
1446 fp = make_file(repo, repo.changelog, opts['output'], | 1446 fp = make_file(repo, opts['output'], node, total=total, seqno=seqno, |
1447 node=node, total=total, seqno=seqno, | |
1448 revwidth=revwidth) | 1447 revwidth=revwidth) |
1449 if fp != sys.stdout: | 1448 if fp != sys.stdout: |
1450 ui.note("%s\n" % fp.name) | 1449 ui.note("%s\n" % fp.name) |
1451 | 1450 |
1452 fp.write("# HG changeset patch\n") | 1451 fp.write("# HG changeset patch\n") |