# # # patch "tracvc/mtn/automate.py" # from [195fa3542464fd9b5a8cfa2a5acf8e8ce3cff4a8] # to [9a4ae3091e1ab0f865a560e0504964fbefa361a8] # # patch "tracvc/mtn/backend.py" # from [7a16784ea1d5f64d834e3e4d58d9c50bfc36d252] # to [b311743056246f8336b002f3e26a6a38a67a65af] # ============================================================ --- tracvc/mtn/automate.py 195fa3542464fd9b5a8cfa2a5acf8e8ce3cff4a8 +++ tracvc/mtn/automate.py 9a4ae3091e1ab0f865a560e0504964fbefa361a8 @@ -330,7 +330,11 @@ class MTN(object): revs.append(values[0]) return revs + def interface_version(self): + """Returns the automation interface version.""" + return self.automate.command("interface_version").strip() + class Changeset(object): """Represents a monotone changeset in parsed form.""" ============================================================ --- tracvc/mtn/backend.py 7a16784ea1d5f64d834e3e4d58d9c50bfc36d252 +++ tracvc/mtn/backend.py b311743056246f8336b002f3e26a6a38a67a65af @@ -32,6 +32,7 @@ from trac import __version__ as trac_ver from trac.core import Component, implements, TracError from trac.config import Option, ListOption from trac import __version__ as trac_version +from tracvc.mtn import __version__ as tracmtn_version from pkg_resources import parse_version from time import strptime from tracvc.mtn.automate import MTN, AutomateException @@ -47,6 +48,12 @@ REVID_RULE = re.compile(r'^[0-9a-f]{40}$ DATE_RULE = re.compile(r'\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}') REVID_RULE = re.compile(r'^[0-9a-f]{40}$') +INTERFACE_VERSIONS = { + '2.0': '0.26', '2.1': '0.27', '2.2': '0.28', + '3.0': '0.29', '3.1': '0.30', + '4.0': '0.31-0.33', '4.1': '0.34', '4.3': '0.35', +} + class MonotoneConnector(Component): """ Provides this plugin's functionality. @@ -65,6 +72,7 @@ class MonotoneConnector(Component): def __init__(self): Component.__init__(self) self.repos = {} + self.version = None def get_supported_types(self): """ @@ -109,6 +117,16 @@ class MonotoneConnector(Component): self.repos[path] = MonotoneRepository(path, self.log, self.mtn_binary, self.cachespec, self.get_revprops()) + # this is the main entry point for users of this plugin, so let's set + # version information here + if not self.version: + interface_version = self.repos[path].interface_version() + monotone_version = INTERFACE_VERSIONS.get(interface_version, None) + if monotone_version: + interface_version += " [guessed version %s]" % monotone_version + self.version = "%s (Monotone automation interface %s)" % \ + (tracmtn_version, interface_version) + self.env.systeminfo.append(('TracMonotone', self.version)) return self.repos[path] # IWikiSyntaxProvider methods @@ -407,7 +425,13 @@ class MonotoneRepository(Repository): """ return dates(self.mtn.certs(rev).get('date', [])) + def interface_version(self): + """ + Returns the automation interface version string. + """ + return self.mtn.interface_version() + class MonotoneNode(Node): """ Represents a directory or file in the repository at a given