mercurial/subrepo.py
changeset 15534 80ec63090a7a
parent 15513 646759147717
parent 15531 0810ccc51f0a
child 15614 260a6449d83a
equal deleted inserted replaced
15530:eeac5e179243 15534:80ec63090a7a
   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)