hgext/keyword.py
changeset 10604 9a36d159595f
parent 10603 f511df3a4357
child 10652 e7f840e4ac7d
equal deleted inserted replaced
10603:f511df3a4357 10604:9a36d159595f
    77 '''
    77 '''
    78 
    78 
    79 from mercurial import commands, cmdutil, dispatch, filelog, revlog, extensions
    79 from mercurial import commands, cmdutil, dispatch, filelog, revlog, extensions
    80 from mercurial import patch, localrepo, templater, templatefilters, util, match
    80 from mercurial import patch, localrepo, templater, templatefilters, util, match
    81 from mercurial.hgweb import webcommands
    81 from mercurial.hgweb import webcommands
    82 from mercurial.lock import release
       
    83 from mercurial.node import nullid
    82 from mercurial.node import nullid
    84 from mercurial.i18n import _
    83 from mercurial.i18n import _
    85 import re, shutil, tempfile
    84 import re, shutil, tempfile
    86 
    85 
    87 commands.optionalrepo += ' kwdemo'
    86 commands.optionalrepo += ' kwdemo'
   262 def _kwfwrite(ui, repo, expand, *pats, **opts):
   261 def _kwfwrite(ui, repo, expand, *pats, **opts):
   263     '''Selects files and passes them to kwtemplater.overwrite.'''
   262     '''Selects files and passes them to kwtemplater.overwrite.'''
   264     if repo.dirstate.parents()[1] != nullid:
   263     if repo.dirstate.parents()[1] != nullid:
   265         raise util.Abort(_('outstanding uncommitted merge'))
   264         raise util.Abort(_('outstanding uncommitted merge'))
   266     kwt = kwtools['templater']
   265     kwt = kwtools['templater']
   267     status = _status(ui, repo, kwt, *pats, **opts)
   266     wlock = repo.wlock()
   268     modified, added, removed, deleted, unknown, ignored, clean = status
       
   269     if modified or added or removed or deleted:
       
   270         raise util.Abort(_('outstanding uncommitted changes'))
       
   271     wlock = lock = None
       
   272     try:
   267     try:
   273         wlock = repo.wlock()
   268         status = _status(ui, repo, kwt, *pats, **opts)
   274         lock = repo.lock()
   269         modified, added, removed, deleted, unknown, ignored, clean = status
       
   270         if modified or added or removed or deleted:
       
   271             raise util.Abort(_('outstanding uncommitted changes'))
   275         kwt.overwrite(None, expand, clean)
   272         kwt.overwrite(None, expand, clean)
   276     finally:
   273     finally:
   277         release(lock, wlock)
   274         wlock.release()
   278 
   275 
   279 def demo(ui, repo, *args, **opts):
   276 def demo(ui, repo, *args, **opts):
   280     '''print [keywordmaps] configuration and an expansion example
   277     '''print [keywordmaps] configuration and an expansion example
   281 
   278 
   282     Show current, custom, or default keyword template maps and their
   279     Show current, custom, or default keyword template maps and their
   483                 return super(kwrepo, self).commit(*args, **opts)
   480                 return super(kwrepo, self).commit(*args, **opts)
   484             finally:
   481             finally:
   485                 del self.commitctx
   482                 del self.commitctx
   486 
   483 
   487         def kwcommitctx(self, ctx, error=False):
   484         def kwcommitctx(self, ctx, error=False):
   488             wlock = lock = None
   485             n = super(kwrepo, self).commitctx(ctx, error)
   489             try:
   486             # no lock needed, only called from repo.commit() which already locks
   490                 wlock = self.wlock()
   487             kwt.overwrite(n, True, None)
   491                 lock = self.lock()
   488             return n
   492                 n = super(kwrepo, self).commitctx(ctx, error)
       
   493                 kwt.overwrite(n, True, None)
       
   494                 return n
       
   495             finally:
       
   496                 release(lock, wlock)
       
   497 
   489 
   498     # monkeypatches
   490     # monkeypatches
   499     def kwpatchfile_init(orig, self, ui, fname, opener,
   491     def kwpatchfile_init(orig, self, ui, fname, opener,
   500                          missing=False, eol=None):
   492                          missing=False, eol=None):
   501         '''Monkeypatch/wrap patch.patchfile.__init__ to avoid
   493         '''Monkeypatch/wrap patch.patchfile.__init__ to avoid