# HG changeset patch # User Matt Mackall # Date 1321826778 21600 # Node ID 80ec63090a7a5549c0ff8ffd049d76112230a852 # Parent eeac5e17924354c4afeb6001ed69a06805189520# Parent 10a4fab20ed986bcd8f315b1a1a14fc00e02a016 merge with stable diff -r eeac5e179243 -r 80ec63090a7a mercurial/help/urls.txt --- a/mercurial/help/urls.txt Fri Nov 18 14:23:03 2011 +0100 +++ b/mercurial/help/urls.txt Sun Nov 20 16:06:18 2011 -0600 @@ -1,7 +1,7 @@ Valid URLs are of the form:: local/filesystem/path[#revision] - file://localhost/filesystem/path[#revision] + file://local/filesystem/path[#revision] http://[user[:pass]@]host[:port]/[path][#revision] https://[user[:pass]@]host[:port]/[path][#revision] ssh://[user@]host[:port]/[path][#revision] diff -r eeac5e179243 -r 80ec63090a7a mercurial/revset.py --- a/mercurial/revset.py Fri Nov 18 14:23:03 2011 +0100 +++ b/mercurial/revset.py Sun Nov 20 16:06:18 2011 -0600 @@ -434,7 +434,10 @@ p = repo['.'].rev() if l: x = getstring(l[0], _("follow expected a filename")) - s = set(ctx.rev() for ctx in repo['.'][x].ancestors()) + if x in repo['.']: + s = set(ctx.rev() for ctx in repo['.'][x].ancestors()) + else: + return [] else: s = set(repo.changelog.ancestors(p)) diff -r eeac5e179243 -r 80ec63090a7a mercurial/subrepo.py --- a/mercurial/subrepo.py Fri Nov 18 14:23:03 2011 +0100 +++ b/mercurial/subrepo.py Sun Nov 20 16:06:18 2011 -0600 @@ -823,6 +823,12 @@ def _gitisbare(self): return self._gitcommand(['config', '--bool', 'core.bare']) == 'true' + def _gitupdatestat(self): + """This must be run before git diff-index. + diff-index only looks at changes to file stat; + this command looks at file contents and updates the stat.""" + self._gitcommand(['update-index', '-q', '--refresh']) + def _gitbranchmap(self): '''returns 2 things: a map from git branch to revision @@ -892,6 +898,7 @@ # different version checked out return True # check for staged changes or modified files; ignore untracked files + self._gitupdatestat() out, code = self._gitdir(['diff-index', '--quiet', 'HEAD']) return code == 1 @@ -999,6 +1006,7 @@ source, revision, kind = state self._fetch(source, revision) base = self._gitcommand(['merge-base', revision, self._state[1]]) + self._gitupdatestat() out, code = self._gitdir(['diff-index', '--quiet', 'HEAD']) def mergefunc(): @@ -1106,6 +1114,7 @@ # if the repo is missing, return no results return [], [], [], [], [], [], [] modified, added, removed = [], [], [] + self._gitupdatestat() if rev2: command = ['diff-tree', rev1, rev2] else: diff -r eeac5e179243 -r 80ec63090a7a tests/test-subrepo-git.t --- a/tests/test-subrepo-git.t Fri Nov 18 14:23:03 2011 +0100 +++ b/tests/test-subrepo-git.t Sun Nov 20 16:06:18 2011 -0600 @@ -361,6 +361,15 @@ $ hg update -qC nosubstate $ ls s +issue3109: false positives in git diff-index + + $ hg update -q + $ touch -t 200001010000 s/g + $ hg status --subrepos + $ touch -t 200001010000 s/g + $ hg sum | grep commit + commit: (clean) + Check hg update --clean $ cd $TESTTMP/ta $ echo > s/g