mercurial/localrepo.py
branchstable
changeset 35025 5c6b96b832c2
parent 34881 8c9b08a0c48c
child 35163 ee64e677c3cf
equal deleted inserted replaced
35024:3f909147a2c3 35025:5c6b96b832c2
  1843             status = self.status(match=match, clean=force)
  1843             status = self.status(match=match, clean=force)
  1844             if force:
  1844             if force:
  1845                 status.modified.extend(status.clean) # mq may commit clean files
  1845                 status.modified.extend(status.clean) # mq may commit clean files
  1846 
  1846 
  1847             # check subrepos
  1847             # check subrepos
  1848             subs = []
  1848             subs, commitsubs, newstate = subrepo.precommit(
  1849             commitsubs = set()
  1849                 self.ui, wctx, status, match, force=force)
  1850             newstate = wctx.substate.copy()
       
  1851             # only manage subrepos and .hgsubstate if .hgsub is present
       
  1852             if '.hgsub' in wctx:
       
  1853                 # we'll decide whether to track this ourselves, thanks
       
  1854                 for c in status.modified, status.added, status.removed:
       
  1855                     if '.hgsubstate' in c:
       
  1856                         c.remove('.hgsubstate')
       
  1857 
       
  1858                 # compare current state to last committed state
       
  1859                 # build new substate based on last committed state
       
  1860                 oldstate = wctx.p1().substate
       
  1861                 for s in sorted(newstate.keys()):
       
  1862                     if not match(s):
       
  1863                         # ignore working copy, use old state if present
       
  1864                         if s in oldstate:
       
  1865                             newstate[s] = oldstate[s]
       
  1866                             continue
       
  1867                         if not force:
       
  1868                             raise error.Abort(
       
  1869                                 _("commit with new subrepo %s excluded") % s)
       
  1870                     dirtyreason = wctx.sub(s).dirtyreason(True)
       
  1871                     if dirtyreason:
       
  1872                         if not self.ui.configbool('ui', 'commitsubrepos'):
       
  1873                             raise error.Abort(dirtyreason,
       
  1874                                 hint=_("use --subrepos for recursive commit"))
       
  1875                         subs.append(s)
       
  1876                         commitsubs.add(s)
       
  1877                     else:
       
  1878                         bs = wctx.sub(s).basestate()
       
  1879                         newstate[s] = (newstate[s][0], bs, newstate[s][2])
       
  1880                         if oldstate.get(s, (None, None, None))[1] != bs:
       
  1881                             subs.append(s)
       
  1882 
       
  1883                 # check for removed subrepos
       
  1884                 for p in wctx.parents():
       
  1885                     r = [s for s in p.substate if s not in newstate]
       
  1886                     subs += [s for s in r if match(s)]
       
  1887                 if subs:
       
  1888                     if (not match('.hgsub') and
       
  1889                         '.hgsub' in (wctx.modified() + wctx.added())):
       
  1890                         raise error.Abort(
       
  1891                             _("can't commit subrepos without .hgsub"))
       
  1892                     status.modified.insert(0, '.hgsubstate')
       
  1893 
       
  1894             elif '.hgsub' in status.removed:
       
  1895                 # clean up .hgsubstate when .hgsub is removed
       
  1896                 if ('.hgsubstate' in wctx and
       
  1897                     '.hgsubstate' not in (status.modified + status.added +
       
  1898                                           status.removed)):
       
  1899                     status.removed.insert(0, '.hgsubstate')
       
  1900 
  1850 
  1901             # make sure all explicit patterns are matched
  1851             # make sure all explicit patterns are matched
  1902             if not force:
  1852             if not force:
  1903                 self.checkcommitpatterns(wctx, vdirs, match, status, fail)
  1853                 self.checkcommitpatterns(wctx, vdirs, match, status, fail)
  1904 
  1854