Package common :: Module hg
[frames] | no frames]

Source Code for Module common.hg

  1  # copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved. 
  2  # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr 
  3  # 
  4  # This file is part of logilab-common. 
  5  # 
  6  # logilab-common is free software: you can redistribute it and/or modify it under 
  7  # the terms of the GNU Lesser General Public License as published by the Free 
  8  # Software Foundation, either version 2.1 of the License, or (at your option) any 
  9  # later version. 
 10  # 
 11  # logilab-common is distributed in the hope that it will be useful, but WITHOUT 
 12  # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
 13  # FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more 
 14  # details. 
 15  # 
 16  # You should have received a copy of the GNU Lesser General Public License along 
 17  # with logilab-common.  If not, see <http://www.gnu.org/licenses/>. 
 18  """mercurial utilities (mercurial should be installed)""" 
 19   
 20  __docformat__ = "restructuredtext en" 
 21   
 22  import os 
 23  import sys 
 24  import os.path as osp 
 25   
 26  try: 
 27      from mercurial.error import RepoError 
 28      from mercurial.__version__ import version as hg_version 
 29  except ImportError: 
 30      from mercurial.repo import RepoError 
 31      from mercurial.version import get_version 
 32      hg_version = get_version() 
 33   
 34  from mercurial.hg import repository as Repository 
 35  from mercurial.ui import ui as Ui 
 36  from mercurial.node import short 
 37  try: 
 38      # mercurial >= 1.2 (?) 
 39      from mercurial.cmdutil import walkchangerevs 
 40  except ImportError as ex: 
 41      from mercurial.commands import walkchangerevs 
 42  try: 
 43      # mercurial >= 1.1 (.1?) 
 44      from mercurial.util import cachefunc 
 45  except ImportError as ex: 
46 - def cachefunc(func):
47 return func
48 try: 49 # mercurial >= 1.3.1 50 from mercurial import encoding 51 _encoding = encoding.encoding 52 except ImportError: 53 try: 54 from mercurial.util import _encoding 55 except ImportError: 56 import locale 57 # stay compatible with mercurial 0.9.1 (etch debian release) 58 # (borrowed from mercurial.util 1.1.2) 59 try: 60 _encoding = os.environ.get("HGENCODING") 61 if sys.platform == 'darwin' and not _encoding: 62 # On darwin, getpreferredencoding ignores the locale environment and 63 # always returns mac-roman. We override this if the environment is 64 # not C (has been customized by the user). 65 locale.setlocale(locale.LC_CTYPE, '') 66 _encoding = locale.getlocale()[1] 67 if not _encoding: 68 _encoding = locale.getpreferredencoding() or 'ascii' 69 except locale.Error: 70 _encoding = 'ascii' 71 try: 72 # demandimport causes problems when activated, ensure it isn't 73 # XXX put this in apycot where the pb has been noticed? 74 from mercurial import demandimport 75 demandimport.disable() 76 except: 77 pass 78 79 Ui.warn = lambda *args, **kwargs: 0 # make it quiet 80
81 -def find_repository(path):
82 """returns <path>'s mercurial repository 83 84 None if <path> is not under hg control 85 """ 86 path = osp.realpath(osp.abspath(path)) 87 while not osp.isdir(osp.join(path, ".hg")): 88 oldpath = path 89 path = osp.dirname(path) 90 if path == oldpath: 91 return None 92 return path
93 94
95 -def get_repository(path):
96 """Simple function that open a hg repository""" 97 repopath = find_repository(path) 98 if repopath is None: 99 raise RuntimeError('no repository found in %s' % osp.abspath(path)) 100 return Repository(Ui(), path=repopath)
101
102 -def incoming(wdrepo, masterrepo):
103 try: 104 return wdrepo.findincoming(masterrepo) 105 except AttributeError: 106 from mercurial import hg, discovery 107 revs, checkout = hg.addbranchrevs(wdrepo, masterrepo, ('', []), None) 108 common, incoming, rheads = discovery.findcommonincoming( 109 wdrepo, masterrepo, heads=revs) 110 if not masterrepo.local(): 111 from mercurial import bundlerepo, changegroup 112 if revs is None and masterrepo.capable('changegroupsubset'): 113 revs = rheads 114 if revs is None: 115 cg = masterrepo.changegroup(incoming, "incoming") 116 else: 117 cg = masterrepo.changegroupsubset(incoming, revs, 'incoming') 118 fname = changegroup.writebundle(cg, None, "HG10UN") 119 # use the created uncompressed bundlerepo 120 masterrepo = bundlerepo.bundlerepository(wdrepo.ui, wdrepo.root, fname) 121 return masterrepo.changelog.nodesbetween(incoming, revs)[0]
122
123 -def outgoing(wdrepo, masterrepo):
124 try: 125 return wdrepo.findoutgoing(masterrepo) 126 except AttributeError: 127 from mercurial import hg, discovery 128 revs, checkout = hg.addbranchrevs(wdrepo, wdrepo, ('', []), None) 129 o = discovery.findoutgoing(wdrepo, masterrepo) 130 return wdrepo.changelog.nodesbetween(o, revs)[0]
131