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) |