821 return base == r1 |
821 return base == r1 |
822 |
822 |
823 def _gitisbare(self): |
823 def _gitisbare(self): |
824 return self._gitcommand(['config', '--bool', 'core.bare']) == 'true' |
824 return self._gitcommand(['config', '--bool', 'core.bare']) == 'true' |
825 |
825 |
|
826 def _gitupdatestat(self): |
|
827 """This must be run before git diff-index. |
|
828 diff-index only looks at changes to file stat; |
|
829 this command looks at file contents and updates the stat.""" |
|
830 self._gitcommand(['update-index', '-q', '--refresh']) |
|
831 |
826 def _gitbranchmap(self): |
832 def _gitbranchmap(self): |
827 '''returns 2 things: |
833 '''returns 2 things: |
828 a map from git branch to revision |
834 a map from git branch to revision |
829 a map from revision to branches''' |
835 a map from revision to branches''' |
830 branch2rev = {} |
836 branch2rev = {} |
890 return True |
896 return True |
891 if not ignoreupdate and self._state[1] != self._gitstate(): |
897 if not ignoreupdate and self._state[1] != self._gitstate(): |
892 # different version checked out |
898 # different version checked out |
893 return True |
899 return True |
894 # check for staged changes or modified files; ignore untracked files |
900 # check for staged changes or modified files; ignore untracked files |
|
901 self._gitupdatestat() |
895 out, code = self._gitdir(['diff-index', '--quiet', 'HEAD']) |
902 out, code = self._gitdir(['diff-index', '--quiet', 'HEAD']) |
896 return code == 1 |
903 return code == 1 |
897 |
904 |
898 def get(self, state, overwrite=False): |
905 def get(self, state, overwrite=False): |
899 source, revision, kind = state |
906 source, revision, kind = state |
997 |
1004 |
998 def merge(self, state): |
1005 def merge(self, state): |
999 source, revision, kind = state |
1006 source, revision, kind = state |
1000 self._fetch(source, revision) |
1007 self._fetch(source, revision) |
1001 base = self._gitcommand(['merge-base', revision, self._state[1]]) |
1008 base = self._gitcommand(['merge-base', revision, self._state[1]]) |
|
1009 self._gitupdatestat() |
1002 out, code = self._gitdir(['diff-index', '--quiet', 'HEAD']) |
1010 out, code = self._gitdir(['diff-index', '--quiet', 'HEAD']) |
1003 |
1011 |
1004 def mergefunc(): |
1012 def mergefunc(): |
1005 if base == revision: |
1013 if base == revision: |
1006 self.get(state) # fast forward merge |
1014 self.get(state) # fast forward merge |
1104 rev1 = self._state[1] |
1112 rev1 = self._state[1] |
1105 if self._gitmissing() or not rev1: |
1113 if self._gitmissing() or not rev1: |
1106 # if the repo is missing, return no results |
1114 # if the repo is missing, return no results |
1107 return [], [], [], [], [], [], [] |
1115 return [], [], [], [], [], [], [] |
1108 modified, added, removed = [], [], [] |
1116 modified, added, removed = [], [], [] |
|
1117 self._gitupdatestat() |
1109 if rev2: |
1118 if rev2: |
1110 command = ['diff-tree', rev1, rev2] |
1119 command = ['diff-tree', rev1, rev2] |
1111 else: |
1120 else: |
1112 command = ['diff-index', rev1] |
1121 command = ['diff-index', rev1] |
1113 out = self._gitcommand(command) |
1122 out = self._gitcommand(command) |