Mercurial > public > mercurial-scm > hg
comparison mercurial/subrepo.py @ 15531:0810ccc51f0a stable
subrepo: fix git status false positive (issue3109)
It turns out there's a separate command to force git to look at file contents
if the stat has changed.
author | Eric Roshan Eisner <ede@alum.mit.edu> |
---|---|
date | Fri, 11 Nov 2011 11:11:11 +1111 |
parents | ac5a340b26de |
children | 80ec63090a7a 1581da01d5c4 |
comparison
equal
deleted
inserted
replaced
15512:8b011ededfb2 | 15531:0810ccc51f0a |
---|---|
805 return base == r1 | 805 return base == r1 |
806 | 806 |
807 def _gitisbare(self): | 807 def _gitisbare(self): |
808 return self._gitcommand(['config', '--bool', 'core.bare']) == 'true' | 808 return self._gitcommand(['config', '--bool', 'core.bare']) == 'true' |
809 | 809 |
810 def _gitupdatestat(self): | |
811 """This must be run before git diff-index. | |
812 diff-index only looks at changes to file stat; | |
813 this command looks at file contents and updates the stat.""" | |
814 self._gitcommand(['update-index', '-q', '--refresh']) | |
815 | |
810 def _gitbranchmap(self): | 816 def _gitbranchmap(self): |
811 '''returns 2 things: | 817 '''returns 2 things: |
812 a map from git branch to revision | 818 a map from git branch to revision |
813 a map from revision to branches''' | 819 a map from revision to branches''' |
814 branch2rev = {} | 820 branch2rev = {} |
874 return True | 880 return True |
875 if not ignoreupdate and self._state[1] != self._gitstate(): | 881 if not ignoreupdate and self._state[1] != self._gitstate(): |
876 # different version checked out | 882 # different version checked out |
877 return True | 883 return True |
878 # check for staged changes or modified files; ignore untracked files | 884 # check for staged changes or modified files; ignore untracked files |
885 self._gitupdatestat() | |
879 out, code = self._gitdir(['diff-index', '--quiet', 'HEAD']) | 886 out, code = self._gitdir(['diff-index', '--quiet', 'HEAD']) |
880 return code == 1 | 887 return code == 1 |
881 | 888 |
882 def get(self, state, overwrite=False): | 889 def get(self, state, overwrite=False): |
883 source, revision, kind = state | 890 source, revision, kind = state |
981 | 988 |
982 def merge(self, state): | 989 def merge(self, state): |
983 source, revision, kind = state | 990 source, revision, kind = state |
984 self._fetch(source, revision) | 991 self._fetch(source, revision) |
985 base = self._gitcommand(['merge-base', revision, self._state[1]]) | 992 base = self._gitcommand(['merge-base', revision, self._state[1]]) |
993 self._gitupdatestat() | |
986 out, code = self._gitdir(['diff-index', '--quiet', 'HEAD']) | 994 out, code = self._gitdir(['diff-index', '--quiet', 'HEAD']) |
987 | 995 |
988 def mergefunc(): | 996 def mergefunc(): |
989 if base == revision: | 997 if base == revision: |
990 self.get(state) # fast forward merge | 998 self.get(state) # fast forward merge |
1088 rev1 = self._state[1] | 1096 rev1 = self._state[1] |
1089 if self._gitmissing() or not rev1: | 1097 if self._gitmissing() or not rev1: |
1090 # if the repo is missing, return no results | 1098 # if the repo is missing, return no results |
1091 return [], [], [], [], [], [], [] | 1099 return [], [], [], [], [], [], [] |
1092 modified, added, removed = [], [], [] | 1100 modified, added, removed = [], [], [] |
1101 self._gitupdatestat() | |
1093 if rev2: | 1102 if rev2: |
1094 command = ['diff-tree', rev1, rev2] | 1103 command = ['diff-tree', rev1, rev2] |
1095 else: | 1104 else: |
1096 command = ['diff-index', rev1] | 1105 command = ['diff-index', rev1] |
1097 out = self._gitcommand(command) | 1106 out = self._gitcommand(command) |