hg remove implicit for whole tree commits?
Robin Farine
robin.farine at terminus.org
Mon Aug 8 03:31:26 CDT 2005
On Monday 08 August 2005 07.53, Thomas Arendsen Hein wrote:
> > Perhaps hg status could display a 'D' for deleted but not
> > removed files?
> I think a '!' would be a good status character, because
> 1. R(emoved) and D(eleted) may be confused easily
> 2. ! is kind of a warning that something is wrong here.
Agreed. And the fact that '!' is a punctuation mark like '?' maps
well to the duality of their meaning in Mercurial, good choice.
> Here is a first patch to dirstate.changes() which will not change
> the real functionality, but internally already does everything
> what's needed. It is not yet in my public tree.
I see two vestiges from the old code (comments below), could you
crosscheck?
> diff -r fbe964ae7325 mercurial/hg.py
> --- a/mercurial/hg.py Sun Aug 7 16:41:13 2005
> +++ b/mercurial/hg.py Mon Aug 8 07:51:58 2005
> @@ -487,30 +487,38 @@
> def changes(self, files = None, match = util.always):
> self.read()
> dc = self.map.copy()
> - lookup, changed, added, unknown = [], [], [], []
> + lookup, modified, added, removed = [], [], [], []
> + deleted, unknown = [], []
>
> for src, fn in self.walk(files, match):
> - try: s = os.stat(os.path.join(self.root, fn))
> - except: continue
> + try:
> + s = os.stat(os.path.join(self.root, fn))
> + except OSError:
> + s = None
>
> if fn in dc:
> c = dc[fn]
> del dc[fn]
Since you now handle !-files explicitely, the 'del dc[fn]' can
be either removed or you could verify that dc is empty before
returning (and raise a software error exception if not).
[...]
> + if s:
[...]
> elif c[0] == 'r':
> - unknown.append(fn)
> - elif c[2] != s.st_size or (c[1] ^ s.st_mode) & 0100:
> - changed.append(fn)
> - elif c[1] != s.st_mode or c[3] != s.st_mtime:
> - lookup.append(fn)
> - else:
> - if match(fn): unknown.append(fn)
> -
> - return (lookup, changed, added, filter(match, dc.keys()), unknown)
> + removed.append(fn)
> + else:
> + deleted.append(fn)
> + elif s and match(fn):
Here we have an fn that is not in dc, so doesn't the walk() code
already ensure the match(fn) condition?
> + unknown.append(fn)
> +
> + return (lookup, modified, added, removed + deleted, unknown)
>
> # used to avoid circular references so destructors work
> def opener(base):
More information about the Mercurial
mailing list