# HG changeset patch # User mpm@selenic.com # Date 1117831598 28800 # Node ID f57519cddd3dad6875ae96bbeac626b054182242 # Parent 1536ccac47e90a1850ea8a3f86f2cb9c196f2cc0 move repo.current to dirstate.parents() -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 move repo.current to dirstate.parents() dirstate now tracks the parents for the working dir add a parents command to show them manifest hash: cd69237838c3f69f7937723c4a6803d47cb27cfa -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCoMGuywK+sNU5EO8RAg5UAKCVLUrsJtkoIOTM+e0BLqEVN3Ni3gCeNDyy ZF8jD728cl9K7S4sIN4gX4Y= =P4bu -----END PGP SIGNATURE----- diff --git a/hg b/hg --- a/hg +++ b/hg @@ -66,9 +66,8 @@ def diff(files = None, node1 = None, nod else: date2 = time.asctime() if not node1: - node1 = repo.current + node1 = repo.dirstate.parents()[0] (c, a, d, u) = repo.diffdir(repo.root, node1) - a = [] # ignore unknown files in repo, by popular request def read(f): return file(os.path.join(repo.root, f)).read() change = repo.changelog.read(node1) @@ -139,9 +138,9 @@ elif cmd == "remove" or cmd == "rm" or c elif cmd == "commit" or cmd == "checkin" or cmd == "ci": if 1: if len(args) > 0: - repo.commit(repo.current, args) + repo.commit(args) else: - repo.commit(repo.current) + repo.commit() elif cmd == "rawcommit": "raw commit interface" rc = {} @@ -204,7 +203,7 @@ elif cmd == "import" or cmd == "patch": if files: if os.system("patch -p%d < %s %s" % (strip, pf, quiet)): raise "patch failed!" - repo.commit(repo.current, files, text) + repo.commit(files, text) elif cmd == "diff": revs = [] diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -102,7 +102,7 @@ def annotate(u, repo, *args, **ops): ops['number'] = 1 args = relpath(repo, args) - node = repo.current + node = repo.dirstate.parents()[0] if ops['revision']: node = repo.changelog.lookup(ops['revision']) change = repo.changelog.read(node) @@ -142,6 +142,17 @@ def heads(ui, repo): print "description:" print changes[4] +def parents(ui, repo, node = None): + '''show the parents of the current working dir''' + if node: + p = repo.changelog.parents(repo.lookup(hg.bin(node))) + else: + p = repo.dirstate.parents() + + for n in p: + if n != hg.nullid: + ui.write("%d:%s\n" % (repo.changelog.rev(n), hg.hex(n))) + def status(ui, repo): '''show changed files in the working directory @@ -172,6 +183,7 @@ table = { ('n', 'number', None, 'show revision number'), ('c', 'changeset', None, 'show changeset')], 'hg annotate [-u] [-c] [-n] [-r id] [files]'), + "parents": (parents, [], 'hg parents [node]'), "status": (status, [], 'hg status'), "undo": (undo, [], 'hg undo'), } diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -155,6 +155,7 @@ class dirstate: self.dirty = 0 self.ui = ui self.map = None + self.pl = None def __del__(self): if self.dirty: @@ -171,6 +172,15 @@ class dirstate: if not self.map: self.read() return key in self.map + def parents(self): + if not self.pl: + self.read() + return self.pl + + def setparents(self, p1, p2 = nullid): + self.dirty = 1 + self.pl = p1, p2 + def state(self, key): try: return self[key][0] @@ -181,11 +191,14 @@ class dirstate: if self.map is not None: return self.map self.map = {} + self.pl = [nullid, nullid] try: st = self.opener("dirstate").read() except: return - pos = 0 + self.pl = [st[:20], st[20: 40]] + + pos = 40 while pos < len(st): e = struct.unpack(">cllll", st[pos:pos+17]) l = e[4] @@ -232,6 +245,7 @@ class dirstate: def write(self): st = self.opener("dirstate", "w") + st.write("".join(self.pl)) for f, e in self.map.items(): e = struct.pack(">cllll", e[0], e[1], e[2], e[3], len(f)) st.write(e + f) @@ -297,15 +311,7 @@ class localrepository: if not self.remote: self.dirstate = dirstate(self.opener, ui) - try: - self.current = bin(self.opener("current").read()) - except IOError: - self.current = None - def setcurrent(self, node): - self.current = node - self.opener("current", "w").write(hex(node)) - def ignore(self, f): if self.ignorelist is None: self.ignorelist = [] @@ -366,7 +372,7 @@ class localrepository: node = self.changelog.tip() f.sort() - self.setcurrent(node) + self.dirstate.setparents(node) self.dirstate.update(f, 'i') else: @@ -486,7 +492,7 @@ class localrepository: os.makedirs(os.path.dirname(f)) file(f, "w").write(t) - self.setcurrent(node) + self.dirstate.setparents(node) self.dirstate.clear() self.dirstate.update([f for f,n in l], "n")