comparison mercurial/commands.py @ 1092:0a02315976ff

commands: use node functions directly
author mpm@selenic.com
date Sat, 27 Aug 2005 14:55:07 -0700
parents 1bca39b85615
children 1f1661c58283
comparison
equal deleted inserted replaced
1091:d62130f99a73 1092:0a02315976ff
4 # 4 #
5 # This software may be used and distributed according to the terms 5 # This software may be used and distributed according to the terms
6 # of the GNU General Public License, incorporated herein by reference. 6 # of the GNU General Public License, incorporated herein by reference.
7 7
8 from demandload import demandload 8 from demandload import demandload
9 from node import *
9 demandload(globals(), "os re sys signal shutil imp") 10 demandload(globals(), "os re sys signal shutil imp")
10 demandload(globals(), "fancyopts ui hg util lock") 11 demandload(globals(), "fancyopts ui hg util lock")
11 demandload(globals(), "fnmatch hgweb mdiff random signal time traceback") 12 demandload(globals(), "fnmatch hgweb mdiff random signal time traceback")
12 demandload(globals(), "errno socket version struct atexit sets") 13 demandload(globals(), "errno socket version struct atexit sets")
13 14
161 yield str(fix(spec, None)) 162 yield str(fix(spec, None))
162 163
163 def make_filename(repo, r, pat, node=None, 164 def make_filename(repo, r, pat, node=None,
164 total=None, seqno=None, revwidth=None): 165 total=None, seqno=None, revwidth=None):
165 node_expander = { 166 node_expander = {
166 'H': lambda: hg.hex(node), 167 'H': lambda: hex(node),
167 'R': lambda: str(r.rev(node)), 168 'R': lambda: str(r.rev(node)),
168 'h': lambda: hg.short(node), 169 'h': lambda: short(node),
169 } 170 }
170 expander = { 171 expander = {
171 '%': lambda: '%', 172 '%': lambda: '%',
172 'b': lambda: os.path.basename(repo.root), 173 'b': lambda: os.path.basename(repo.root),
173 } 174 }
240 return repo.wfile(f).read() 241 return repo.wfile(f).read()
241 242
242 if ui.quiet: 243 if ui.quiet:
243 r = None 244 r = None
244 else: 245 else:
245 hexfunc = ui.verbose and hg.hex or hg.short 246 hexfunc = ui.verbose and hex or short
246 r = [hexfunc(node) for node in [node1, node2] if node] 247 r = [hexfunc(node) for node in [node1, node2] if node]
247 248
248 change = repo.changelog.read(node1) 249 change = repo.changelog.read(node1)
249 mmap = repo.manifest.read(change[0]) 250 mmap = repo.manifest.read(change[0])
250 date1 = date(change) 251 date1 = date(change)
271 changenode = log.node(rev) 272 changenode = log.node(rev)
272 elif not rev: 273 elif not rev:
273 rev = log.rev(changenode) 274 rev = log.rev(changenode)
274 275
275 if ui.quiet: 276 if ui.quiet:
276 ui.write("%d:%s\n" % (rev, hg.short(changenode))) 277 ui.write("%d:%s\n" % (rev, short(changenode)))
277 return 278 return
278 279
279 changes = log.read(changenode) 280 changes = log.read(changenode)
280 281
281 t, tz = changes[2].split(' ') 282 t, tz = changes[2].split(' ')
284 tz = int(tz) 285 tz = int(tz)
285 except ValueError: 286 except ValueError:
286 tz = 0 287 tz = 0
287 date = time.asctime(time.localtime(float(t))) + " %+05d" % (int(tz)/-36) 288 date = time.asctime(time.localtime(float(t))) + " %+05d" % (int(tz)/-36)
288 289
289 parents = [(log.rev(p), ui.verbose and hg.hex(p) or hg.short(p)) 290 parents = [(log.rev(p), ui.verbose and hex(p) or short(p))
290 for p in log.parents(changenode) 291 for p in log.parents(changenode)
291 if ui.debugflag or p != hg.nullid] 292 if ui.debugflag or p != nullid]
292 if not ui.debugflag and len(parents) == 1 and parents[0][0] == rev-1: 293 if not ui.debugflag and len(parents) == 1 and parents[0][0] == rev-1:
293 parents = [] 294 parents = []
294 295
295 if ui.verbose: 296 if ui.verbose:
296 ui.write("changeset: %d:%s\n" % (rev, hg.hex(changenode))) 297 ui.write("changeset: %d:%s\n" % (rev, hex(changenode)))
297 else: 298 else:
298 ui.write("changeset: %d:%s\n" % (rev, hg.short(changenode))) 299 ui.write("changeset: %d:%s\n" % (rev, short(changenode)))
299 300
300 for tag in repo.nodetags(changenode): 301 for tag in repo.nodetags(changenode):
301 ui.status("tag: %s\n" % tag) 302 ui.status("tag: %s\n" % tag)
302 for parent in parents: 303 for parent in parents:
303 ui.write("parent: %d:%s\n" % parent) 304 ui.write("parent: %d:%s\n" % parent)
305 if brinfo and changenode in brinfo: 306 if brinfo and changenode in brinfo:
306 br = brinfo[changenode] 307 br = brinfo[changenode]
307 ui.write("branch: %s\n" % " ".join(br)) 308 ui.write("branch: %s\n" % " ".join(br))
308 309
309 ui.debug("manifest: %d:%s\n" % (repo.manifest.rev(changes[0]), 310 ui.debug("manifest: %d:%s\n" % (repo.manifest.rev(changes[0]),
310 hg.hex(changes[0]))) 311 hex(changes[0])))
311 ui.status("user: %s\n" % changes[1]) 312 ui.status("user: %s\n" % changes[1])
312 ui.status("date: %s\n" % date) 313 ui.status("date: %s\n" % date)
313 314
314 if ui.debugflag: 315 if ui.debugflag:
315 files = repo.changes(log.parents(changenode)[0], changenode) 316 files = repo.changes(log.parents(changenode)[0], changenode)
462 repo.remove(remove) 463 repo.remove(remove)
463 464
464 def annotate(ui, repo, *pats, **opts): 465 def annotate(ui, repo, *pats, **opts):
465 """show changeset information per file line""" 466 """show changeset information per file line"""
466 def getnode(rev): 467 def getnode(rev):
467 return hg.short(repo.changelog.node(rev)) 468 return short(repo.changelog.node(rev))
468 469
469 def getname(rev): 470 def getname(rev):
470 try: 471 try:
471 return bcache[rev] 472 return bcache[rev]
472 except KeyError: 473 except KeyError:
700 " nodeid p1 p2\n") 701 " nodeid p1 p2\n")
701 for i in range(r.count()): 702 for i in range(r.count()):
702 e = r.index[i] 703 e = r.index[i]
703 ui.write("% 6d % 9d % 7d % 6d % 7d %s %s %s\n" % ( 704 ui.write("% 6d % 9d % 7d % 6d % 7d %s %s %s\n" % (
704 i, e[0], e[1], e[2], e[3], 705 i, e[0], e[1], e[2], e[3],
705 hg.short(e[6]), hg.short(e[4]), hg.short(e[5]))) 706 short(e[6]), short(e[4]), short(e[5])))
706 707
707 def debugindexdot(ui, file_): 708 def debugindexdot(ui, file_):
708 """dump an index DAG as a .dot file""" 709 """dump an index DAG as a .dot file"""
709 r = hg.revlog(file, file_, "") 710 r = hg.revlog(file, file_, "")
710 ui.write("digraph G {\n") 711 ui.write("digraph G {\n")
711 for i in range(r.count()): 712 for i in range(r.count()):
712 e = r.index[i] 713 e = r.index[i]
713 ui.write("\t%d -> %d\n" % (r.rev(e[4]), i)) 714 ui.write("\t%d -> %d\n" % (r.rev(e[4]), i))
714 if e[5] != hg.nullid: 715 if e[5] != nullid:
715 ui.write("\t%d -> %d\n" % (r.rev(e[5]), i)) 716 ui.write("\t%d -> %d\n" % (r.rev(e[5]), i))
716 ui.write("}\n") 717 ui.write("}\n")
717 718
718 def debugwalk(ui, repo, *pats, **opts): 719 def debugwalk(ui, repo, *pats, **opts):
719 """show how files match on given patterns""" 720 """show how files match on given patterns"""
759 if fp != sys.stdout: 760 if fp != sys.stdout:
760 ui.note("%s\n" % fp.name) 761 ui.note("%s\n" % fp.name)
761 762
762 fp.write("# HG changeset patch\n") 763 fp.write("# HG changeset patch\n")
763 fp.write("# User %s\n" % change[1]) 764 fp.write("# User %s\n" % change[1])
764 fp.write("# Node ID %s\n" % hg.hex(node)) 765 fp.write("# Node ID %s\n" % hex(node))
765 fp.write("# Parent %s\n" % hg.hex(prev)) 766 fp.write("# Parent %s\n" % hex(prev))
766 if other != hg.nullid: 767 if other != nullid:
767 fp.write("# Parent %s\n" % hg.hex(other)) 768 fp.write("# Parent %s\n" % hex(other))
768 fp.write(change[4].rstrip()) 769 fp.write(change[4].rstrip())
769 fp.write("\n\n") 770 fp.write("\n\n")
770 771
771 dodiff(fp, ui, repo, prev, node, text=opts['text']) 772 dodiff(fp, ui, repo, prev, node, text=opts['text'])
772 if fp != sys.stdout: 773 if fp != sys.stdout:
900 for n in repo.changelog.heads(): 901 for n in repo.changelog.heads():
901 show_changeset(ui, repo, changenode=n, brinfo=br) 902 show_changeset(ui, repo, changenode=n, brinfo=br)
902 903
903 def identify(ui, repo): 904 def identify(ui, repo):
904 """print information about the working copy""" 905 """print information about the working copy"""
905 parents = [p for p in repo.dirstate.parents() if p != hg.nullid] 906 parents = [p for p in repo.dirstate.parents() if p != nullid]
906 if not parents: 907 if not parents:
907 ui.write("unknown\n") 908 ui.write("unknown\n")
908 return 909 return
909 910
910 hexfunc = ui.verbose and hg.hex or hg.short 911 hexfunc = ui.verbose and hex or short
911 (c, a, d, u) = repo.changes() 912 (c, a, d, u) = repo.changes()
912 output = ["%s%s" % ('+'.join([hexfunc(parent) for parent in parents]), 913 output = ["%s%s" % ('+'.join([hexfunc(parent) for parent in parents]),
913 (c or a or d) and "+" or "")] 914 (c or a or d) and "+" or "")]
914 915
915 if not ui.quiet: 916 if not ui.quiet:
1075 mf = repo.manifest.readflags(n) 1076 mf = repo.manifest.readflags(n)
1076 files = m.keys() 1077 files = m.keys()
1077 files.sort() 1078 files.sort()
1078 1079
1079 for f in files: 1080 for f in files:
1080 ui.write("%40s %3s %s\n" % (hg.hex(m[f]), mf[f] and "755" or "644", f)) 1081 ui.write("%40s %3s %s\n" % (hex(m[f]), mf[f] and "755" or "644", f))
1081 1082
1082 def outgoing(ui, repo, dest="default-push"): 1083 def outgoing(ui, repo, dest="default-push"):
1083 """show changesets not found in destination""" 1084 """show changesets not found in destination"""
1084 dest = ui.expandpath(dest) 1085 dest = ui.expandpath(dest)
1085 other = hg.repository(ui, dest) 1086 other = hg.repository(ui, dest)
1095 p = repo.changelog.parents(repo.lookup(rev)) 1096 p = repo.changelog.parents(repo.lookup(rev))
1096 else: 1097 else:
1097 p = repo.dirstate.parents() 1098 p = repo.dirstate.parents()
1098 1099
1099 for n in p: 1100 for n in p:
1100 if n != hg.nullid: 1101 if n != nullid:
1101 show_changeset(ui, repo, changenode=n) 1102 show_changeset(ui, repo, changenode=n)
1102 1103
1103 def paths(ui, search=None): 1104 def paths(ui, search=None):
1104 """show definition of symbolic path names""" 1105 """show definition of symbolic path names"""
1105 try: 1106 try:
1258 cmd = fin.readline()[:-1] 1259 cmd = fin.readline()[:-1]
1259 if cmd == '': 1260 if cmd == '':
1260 return 1261 return
1261 if cmd == "heads": 1262 if cmd == "heads":
1262 h = repo.heads() 1263 h = repo.heads()
1263 respond(" ".join(map(hg.hex, h)) + "\n") 1264 respond(" ".join(map(hex, h)) + "\n")
1264 if cmd == "lock": 1265 if cmd == "lock":
1265 lock = repo.lock() 1266 lock = repo.lock()
1266 respond("") 1267 respond("")
1267 if cmd == "unlock": 1268 if cmd == "unlock":
1268 if lock: 1269 if lock:
1269 lock.release() 1270 lock.release()
1270 lock = None 1271 lock = None
1271 respond("") 1272 respond("")
1272 elif cmd == "branches": 1273 elif cmd == "branches":
1273 arg, nodes = getarg() 1274 arg, nodes = getarg()
1274 nodes = map(hg.bin, nodes.split(" ")) 1275 nodes = map(bin, nodes.split(" "))
1275 r = [] 1276 r = []
1276 for b in repo.branches(nodes): 1277 for b in repo.branches(nodes):
1277 r.append(" ".join(map(hg.hex, b)) + "\n") 1278 r.append(" ".join(map(hex, b)) + "\n")
1278 respond("".join(r)) 1279 respond("".join(r))
1279 elif cmd == "between": 1280 elif cmd == "between":
1280 arg, pairs = getarg() 1281 arg, pairs = getarg()
1281 pairs = [map(hg.bin, p.split("-")) for p in pairs.split(" ")] 1282 pairs = [map(bin, p.split("-")) for p in pairs.split(" ")]
1282 r = [] 1283 r = []
1283 for b in repo.between(pairs): 1284 for b in repo.between(pairs):
1284 r.append(" ".join(map(hg.hex, b)) + "\n") 1285 r.append(" ".join(map(hex, b)) + "\n")
1285 respond("".join(r)) 1286 respond("".join(r))
1286 elif cmd == "changegroup": 1287 elif cmd == "changegroup":
1287 nodes = [] 1288 nodes = []
1288 arg, roots = getarg() 1289 arg, roots = getarg()
1289 nodes = map(hg.bin, roots.split(" ")) 1290 nodes = map(bin, roots.split(" "))
1290 1291
1291 cg = repo.changegroup(nodes) 1292 cg = repo.changegroup(nodes)
1292 while 1: 1293 while 1:
1293 d = cg.read(4096) 1294 d = cg.read(4096)
1294 if not d: 1295 if not d:
1366 " please use -m or --message instead.\n") 1367 " please use -m or --message instead.\n")
1367 if name == "tip": 1368 if name == "tip":
1368 ui.warn("abort: 'tip' is a reserved name!\n") 1369 ui.warn("abort: 'tip' is a reserved name!\n")
1369 return -1 1370 return -1
1370 if rev: 1371 if rev:
1371 r = hg.hex(repo.lookup(rev)) 1372 r = hex(repo.lookup(rev))
1372 else: 1373 else:
1373 r = hg.hex(repo.changelog.tip()) 1374 r = hex(repo.changelog.tip())
1374 1375
1375 if name.find(revrangesep) >= 0: 1376 if name.find(revrangesep) >= 0:
1376 ui.warn("abort: '%s' cannot be used in a tag name\n" % revrangesep) 1377 ui.warn("abort: '%s' cannot be used in a tag name\n" % revrangesep)
1377 return -1 1378 return -1
1378 1379
1400 1401
1401 l = repo.tagslist() 1402 l = repo.tagslist()
1402 l.reverse() 1403 l.reverse()
1403 for t, n in l: 1404 for t, n in l:
1404 try: 1405 try:
1405 r = "%5d:%s" % (repo.changelog.rev(n), hg.hex(n)) 1406 r = "%5d:%s" % (repo.changelog.rev(n), hex(n))
1406 except KeyError: 1407 except KeyError:
1407 r = " ?:?" 1408 r = " ?:?"
1408 ui.write("%-30s %s\n" % (t, r)) 1409 ui.write("%-30s %s\n" % (t, r))
1409 1410
1410 def tip(ui, repo): 1411 def tip(ui, repo):
1451 for x in found: 1452 for x in found:
1452 show_changeset(ui, repo, changenode=x, brinfo=br) 1453 show_changeset(ui, repo, changenode=x, brinfo=br)
1453 return 1 1454 return 1
1454 if len(found) == 1: 1455 if len(found) == 1:
1455 node = found[0] 1456 node = found[0]
1456 ui.warn("Using head %s for branch %s\n" % (hg.short(node), branch)) 1457 ui.warn("Using head %s for branch %s\n" % (short(node), branch))
1457 else: 1458 else:
1458 ui.warn("branch %s not found\n" % (branch)) 1459 ui.warn("branch %s not found\n" % (branch))
1459 return 1 1460 return 1
1460 else: 1461 else:
1461 node = node and repo.lookup(node) or repo.changelog.tip() 1462 node = node and repo.lookup(node) or repo.changelog.tip()