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)