Changes in plugins/0.12/mercurial-plugin [9953:9128] in trac.svn
- Location:
- plugins/0.12/mercurial-plugin
- Files:
-
- 3 added
- 1 deleted
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
plugins/0.12/mercurial-plugin/setup.py
r9953 r9128 7 7 try: 8 8 import babel 9 10 9 extra['message_extractors'] = { 11 10 'tracext': [ … … 13 12 ], 14 13 } 15 16 from trac.util.dist import get_l10n_cmdclass17 extra['cmdclass'] = get_l10n_cmdclass()18 19 14 except ImportError: 20 15 pass … … 23 18 24 19 setup(name='TracMercurial', 25 install_requires='Trac >=0.12 dev-r9125',20 install_requires='Trac >=0.12multirepos', 26 21 description='Mercurial plugin for Trac multirepos branch', 27 22 keywords='trac scm plugin mercurial hg', 28 version='0.12.0.2 3',23 version='0.12.0.21', 29 24 url=TracMercurial, 30 25 license='GPL', -
plugins/0.12/mercurial-plugin/tracext/hg/backend.py
r9953 r9128 22 22 from trac.core import * 23 23 from trac.config import _TRUE_VALUES as TRUE 24 from trac.env import ISystemInfoProvider25 24 from trac.util import arity 26 25 from trac.util.datefmt import utc 27 26 from trac.util.text import shorten_line, to_unicode 28 27 from trac.versioncontrol.api import Changeset, Node, Repository, \ 29 IRepositoryConnector, RepositoryManager,\28 IRepositoryConnector, \ 30 29 NoSuchChangeset, NoSuchNode 31 30 from trac.versioncontrol.web_ui import IPropertyRenderer, RenderedProperty … … 34 33 try: 35 34 from trac.util.translation import domain_functions 36 gettext, _, tag_, N_, add_domain = \ 37 domain_functions('tracmercurial', 38 ('gettext', '_', 'tag_', 'N_', 'add_domain')) 35 gettext, _, tag_, N_, add_domain = domain_functions('tracmercurial', 36 'gettext', '_', 'tag_', 'N_', 'add_domain') 39 37 except ImportError: 40 38 from trac.util.translation import _, tag_, N_, gettext … … 105 103 def _render_property(self, name, mode, context, props): 106 104 repos, revs = props[name] 107 108 if name in ('Parents', 'Children'):109 label = repos.display_rev110 else:111 label = lambda rev: rev112 113 105 def link(rev): 114 106 chgset = repos.get_changeset(rev) 115 return tag.a( label(rev), class_="changeset",107 return tag.a(rev, class_="changeset", 116 108 title=shorten_line(chgset.message), 117 109 href=context.href.changeset(rev, repos.reponame)) 118 119 110 if name == 'Parents' and len(revs) == 2: # merge 120 111 new = context.resource.id … … 144 135 link(revs[-1])) 145 136 146 147 137 class HgExtPropertyRenderer(Component): 148 138 implements(IPropertyRenderer) 149 139 150 140 def match_property(self, name, mode): 151 return name in ('transplant_source' , 'convert_revision') and \141 return name in ('transplant_source') and \ 152 142 mode == 'revprop' and 4 or 0 153 143 … … 157 147 try: 158 148 chgset = MercurialChangeset(repos, value) 159 link = tag.a( repos.display_rev(chgset.rev), class_="changeset",149 link = tag.a(chgset.rev, class_="changeset", 160 150 title=shorten_line(chgset.message), 161 href=context.href.changeset( hex(value),151 href=context.href.changeset(short(value), 162 152 repos.reponame)) 163 153 except LookupError: … … 166 156 return RenderedProperty(name=_("Transplant:"), content=link, 167 157 name_attributes=[("class", "property")]) 168 169 elif name == 'convert_revision':170 text = value171 if value.startswith('svn:'):172 # svn:af82e41b-90c4-0310-8c96-b1721e28e2e2/trunk@9517173 uuid = value[:40]174 rev = value.rsplit('@', 1)[-1]175 for r in RepositoryManager(self.env).get_real_repositories():176 if r.name.startswith(uuid + ':'):177 path = r.reponame178 href = context.href.changeset(rev, path or None)179 text = tag.a('[%s%s]' % (rev, path and '/' + path),180 class_='changeset', href=href,181 title=_('Changeset in source repository'))182 break183 return RenderedProperty(name=_('Convert:'), content=text,184 name_attributes=[("class", "property")])185 186 158 187 159 class HgDefaultPropertyRenderer(Component): … … 204 176 class MercurialConnector(Component): 205 177 206 implements(I SystemInfoProvider, IRepositoryConnector, IWikiSyntaxProvider)178 implements(IRepositoryConnector, IWikiSyntaxProvider) 207 179 208 180 def __init__(self): 181 self._version = self._version_info = None 209 182 self.ui = None 210 183 locale_dir = pkg_resources.resource_filename(__name__, 'locale') 211 184 add_domain(self.env.path, locale_dir) 212 self._version = self._version_info = None 213 if not hg_import_error: 185 186 def _setup_ui(self, hgrc_path): 187 self.ui = trac_ui(self.log) 188 # (code below adapted from mercurial.dispatch._dispatch) 189 190 # read the local repository .hgrc into a local ui object 191 if hgrc_path: 192 if not os.path.isabs(hgrc_path): 193 hgrc_path = os.path.join(self.env.path, 'conf', hgrc_path) 194 if not os.path.exists(hgrc_path): 195 self.log.warn("[hg] hgrc file (%s) doesn't exist.", hgrc_path) 196 try: 197 self.ui = trac_ui(self.log, parentui=self.ui) 198 self.ui.check_trusted = False 199 self.ui.readconfig(hgrc_path) 200 except IOError, e: 201 self.log.warn("[hg] hgrc file (%s) can't be read: %s", 202 hgrc_path, e) 203 204 extensions.loadall(self.ui) 205 if hasattr(extensions, 'extensions'): 206 for name, module in extensions.extensions(): 207 # setup extensions 208 extsetup = getattr(module, 'extsetup', None) 209 if extsetup: 210 if arity(extsetup) == 1: 211 extsetup(self.ui) 212 else: 213 extsetup() 214 215 def get_supported_types(self): 216 """Support for `repository_type = hg`""" 217 global hg_import_error 218 if hg_import_error: 219 self.error = hg_import_error 220 yield ("hg", -1) 221 else: 222 yield ("hg", 8) 223 224 def get_repository(self, type, dir, params): 225 """Return a `MercurialRepository`""" 226 if not self._version: 214 227 try: 215 228 from mercurial.version import get_version … … 224 237 if m: 225 238 self._version_info = tuple([int(n or 0) for n in m.groups()]) 226 227 def _setup_ui(self, hgrc_path): 228 self.ui = trac_ui(log=self.log) 229 # (code below adapted from mercurial.dispatch._dispatch) 230 231 # read the local repository .hgrc into a local ui object 232 if hgrc_path: 233 if not os.path.isabs(hgrc_path): 234 hgrc_path = os.path.join(self.env.path, 'conf', hgrc_path) 235 if not os.path.exists(hgrc_path): 236 self.log.warn("[hg] hgrc file (%s) doesn't exist.", hgrc_path) 237 try: 238 self.ui = trac_ui(self.ui, log=self.log) 239 self.ui.check_trusted = False 240 self.ui.readconfig(hgrc_path) 241 except IOError, e: 242 self.log.warn("[hg] hgrc file (%s) can't be read: %s", 243 hgrc_path, e) 244 245 extensions.loadall(self.ui) 246 if hasattr(extensions, 'extensions'): 247 for name, module in extensions.extensions(): 248 # setup extensions 249 extsetup = getattr(module, 'extsetup', None) 250 if extsetup: 251 if arity(extsetup) == 1: 252 extsetup(self.ui) 253 else: 254 extsetup() 255 256 # ISystemInfoProvider methods 257 258 def get_system_info(self): 259 if self._version is not None: 260 yield 'Mercurial', self._version 261 262 # IRepositoryConnector methods 263 264 def get_supported_types(self): 265 """Support for `repository_type = hg`""" 266 if hg_import_error: 267 self.error = hg_import_error 268 yield ("hg", -1) 269 else: 270 yield ("hg", 8) 271 272 def get_repository(self, type, dir, params): 273 """Return a `MercurialRepository`""" 239 self.env.systeminfo.append(('Mercurial', self._version)) 274 240 options = {} 275 241 for key, val in self.config.options(type): … … 281 247 repos.version_info = self._version_info 282 248 return repos 249 283 250 284 251 # IWikiSyntaxProvider methods … … 326 293 327 294 class trac_ui(ui): 328 def __init__(self, *args, **kwargs):295 def __init__(self, log, *args, **kwargs): 329 296 ui.__init__(self, *args) 330 297 self.setconfig('ui', 'interactive', 'off') 331 self.log = kwargs.get('log', args and args[0].log or None)298 self.log = log 332 299 333 def write(self, *args , **opts):300 def write(self, *args): 334 301 for a in args: 335 302 self.log.info('(mercurial status) %s', a) 336 303 337 def write_err(self, *args , **opts):304 def write_err(self, *args): 338 305 for a in args: 339 306 self.log.warn('(mercurial warning) %s', a) 340 307 341 def plain(self): 342 return True 343 344 def interactive(self): 308 def isatty(self): 345 309 return False 346 310 … … 430 394 431 395 def normalize_path(self, path): 432 """Remove leading "/", except for the root ."""396 """Remove leading "/", except for the root""" 433 397 return path and path.strip('/') or '' 434 398 435 399 def normalize_rev(self, rev): 436 """Return the full hash for the specified rev."""400 """Return the changelog node for the specified rev""" 437 401 if rev is not None: 438 402 rev = str(rev) 439 return hex(self.hg_node(rev))403 return self.hg_display(self.hg_node(rev)) 440 404 441 405 def short_rev(self, rev): … … 452 416 return rev # it was already a short rev 453 417 return self.repo.changelog.rev(self.hg_node(rev)) 454 455 def display_rev(self, rev):456 return self.hg_display(self.hg_node(rev))457 418 458 419 def get_quickjump_entries(self, rev): … … 558 519 559 520 def get_oldest_rev(self): 560 return hex(nullid)521 return self.hg_display(nullid) 561 522 562 523 def get_youngest_rev(self): 563 return hex(self.repo.changelog.tip())524 return self.hg_display(self.repo.changelog.tip()) 564 525 565 526 def previous_rev(self, rev, path=''): # FIXME: path ignored for now … … 568 529 for p in log.parents(n): 569 530 if p != nullid: 570 return hex(p) # always follow first parent531 return self.hg_display(p) # always follow first parent 571 532 572 533 def next_rev(self, rev, path=''): … … 576 537 if fc: # it is a file 577 538 for child_fc in fc.children(): 578 return hex(child_fc.node())539 return self.hg_display(child_fc.node()) 579 540 else: 580 541 return None … … 582 543 log = self.repo.changelog 583 544 for c in log.children(n): 584 return hex(c) # always follow first child545 return self.hg_display(c) # always follow first child 585 546 586 547 def rev_older_than(self, rev1, rev2): … … 738 699 node = log.tip() 739 700 else: 740 raise NoSuchNode(path, hex(self.n))701 raise NoSuchNode(path, self.repos.hg_display(self.n)) 741 702 self.time = self.repos.hg_time(log.read(node)[2]) 742 rev = hex(node)703 rev = self.repos.hg_display(node) 743 704 Node.__init__(self, self.repos, path, rev, kind) 744 705 self.created_path = path … … 834 795 count += 1 835 796 yield entry 836 entry = (path, hex(ctx.node()), Changeset.EDIT)797 entry = (path, self.repos.hg_display(ctx.node()), Changeset.EDIT) 837 798 if entry: 838 799 if count < limit: … … 866 827 yield entry 867 828 n = repo.changelog.node(rev) 868 entry = (path, hex(n), Changeset.EDIT)829 entry = (path, self.repos.hg_display(n), Changeset.EDIT) 869 830 if entry: 870 831 if count < limit: … … 918 879 extra = log_data[5] 919 880 time = repos.hg_time(timeinfo) 920 Changeset.__init__(self, repos, hex(n), to_unicode(desc),881 Changeset.__init__(self, repos, repos.hg_display(n), to_unicode(desc), 921 882 to_unicode(user), time) 922 883 self.repos = repos … … 924 885 self.manifest_n = manifest 925 886 self.files = files 926 self.parents = [hex(p) for p in log.parents(n) if p != nullid] 927 self.children = [hex(c) for c in log.children(n)] 887 self.parents = [repos.hg_display(p) for p in log.parents(n) \ 888 if p != nullid] 889 self.children = [repos.hg_display(c) for c in log.children(n)] 928 890 self.tags = [t for t in repos.repo.nodetags(n)] 929 891 self.branch = extra.pop("branch", None) … … 991 953 base_path, base_filenode = rename_info 992 954 base_ctx = repo.filectx(base_path, fileid=base_filenode) 993 base_rev = hex(base_ctx.node())955 base_rev = self.repos.hg_display(base_ctx.node()) 994 956 if base_path in deletions: 995 957 action = Changeset.MOVE … … 1010 972 yield change 1011 973 1012 def get_branches(self):1013 """Yield branch names to which this changeset belong."""1014 return self.branch and [(self.branch, len(self.children) == 0)] or []1015
Note:
See TracChangeset
for help on using the changeset viewer.