# HG changeset patch # User mpm@selenic.com # Date 1115334350 28800 # Node ID 4d3a5dcb69725fe0e8cdded5ca84344a9e73ebf4 # Parent 9f64ee81719922f857c4bff34af2b9ab68b16fc4 Make diffdir take a revision argument diff -r 9f64ee817199 -r 4d3a5dcb6972 hg --- a/hg Wed May 04 22:57:51 2005 -0800 +++ b/hg Thu May 05 15:05:50 2005 -0800 @@ -112,7 +112,7 @@ repo.commit(files) elif cmd == "status": - (c, a, d) = repo.diffdir(repo.root) + (c, a, d) = repo.diffdir(repo.root, repo.current) for f in c: print "C", f for f in a: print "?", f for f in d: print "R", f @@ -123,7 +123,7 @@ change = repo.changelog.read(repo.current) mmap = repo.manifest.read(change[0]) - (c, a, d) = repo.diffdir(repo.root) + (c, a, d) = repo.diffdir(repo.root, repo.current) if args: nc = [ x for x in c if x in args ] @@ -151,7 +151,7 @@ sys.stdout.write(mdiff.unidiff(to, tn, f)) elif cmd == "addremove": - (c, a, d) = repo.diffdir(repo.root) + (c, a, d) = repo.diffdir(repo.root, repo.current) repo.add(a) repo.remove(d) diff -r 9f64ee817199 -r 4d3a5dcb6972 mercurial/hg.py --- a/mercurial/hg.py Wed May 04 22:57:51 2005 -0800 +++ b/mercurial/hg.py Thu May 05 15:05:50 2005 -0800 @@ -408,7 +408,7 @@ tr.close() - def commit(self, update = None, text = ""): + def commit(self, update = None, parent, text = ""): tr = self.transaction() try: @@ -419,7 +419,7 @@ remove = [] if update == None: - update = self.diffdir(self.root)[0] + update = self.diffdir(self.root, parent)[0] # check in files new = {} @@ -484,16 +484,25 @@ self.dircache.clear() self.dircache.update(l) - def diffdir(self, path): - dc = self.dircache.copy() + def diffdir(self, path, changeset): changed = [] mf = {} added = [] - if self.current: - change = self.changelog.read(self.current) + if changeset: + change = self.changelog.read(changeset) mf = self.manifest.read(change[0]) + if changeset == self.current: + dc = self.dircache.copy() + else: + dc = dict.fromkeys(mf) + + def fcmp(fn): + t1 = file(fn).read() + t2 = self.file(fn).revision(mf[fn]) + return cmp(t1, t2) + for dir, subdirs, files in os.walk(self.root): d = dir[len(self.root)+1:] if ".hg" in subdirs: subdirs.remove(".hg") @@ -505,12 +514,13 @@ if fn in dc: c = dc[fn] del dc[fn] + if not c: + if fcmp(fn): + changed.append(fn) if c[1] != s.st_size: changed.append(fn) elif c[0] != s.st_mode or c[2] != s.st_mtime: - t1 = file(fn).read() - t2 = self.file(fn).revision(mf[fn]) - if t1 != t2: + if fcmp(fn): changed.append(fn) else: if self.ignore(fn): continue