Re: Monotone VCS support
- From: Daniel Thompson <daniel redfelineninja org uk>
- To: meld-list gnome org
- Subject: Re: Monotone VCS support
- Date: Thu, 17 Nov 2005 20:09:33 +0000
On Tue, 2005-11-15 at 12:00 -0500, meld-list-request gnome org wrote:
> Message: 1
> From: Daniel Thompson <daniel redfelineninja org uk>
> Subject: Monotone VCS support
> To: meld-list gnome org
> Content-Type: text/plain; charset="us-ascii"
>
> Skipped content of type multipart/mixed-------------- next part --------------
> A non-text attachment was scrubbed...
> Name: not available
> Type: application/pgp-signature
It looks like the mailing list might have eaten my message (at least to
digest readers) because it was GPG signed so I'm resending it without a
signature.
-------- Forwarded Message --------
From: Daniel Thompson <daniel redfelineninja org uk>
To: meld-list gnome org
Subject: Monotone VCS support
Date: Mon, 14 Nov 2005 21:07:49 +0000
Hi Folks
Please find attached two patches. The first adds support for the
monotone revision control system which I have spent the last few days
using myself as test. The second contains nothing techincal, it is
simply a 'vanity' patch. Specifically it adds my name to AUTHORS and
copies the whole of the contributors section into the Written by: tab in
the about dialog.
--
Daniel Thompson (Merlin) <daniel redfelineninja org uk>
signature.asc? http://www.redfelineninja.dsl.pipex.com/signature.html
Did Sigmund's wife wear Freudian slips?
Index: meld-1.1.2/meldapp.py
===================================================================
--- meld-1.1.2.orig/meldapp.py 2005-11-09 13:48:48.727018000 +0000
+++ meld-1.1.2/meldapp.py 2005-11-09 15:30:11.937017000 +0000
@@ -434,6 +434,7 @@
"filters" : prefs.Value(prefs.STRING, "Backups\t1\t#*# .#* ~* *~ *.{orig,bak,swp}\n" + \
"CVS\t1\tCVS\n" + \
"SVN\t1\t.svn\n" + \
+ "Monotone\t1\tMT\n" + \
"Binaries\t1\t*.{pyc,a,obj,o,so,la,lib,dll}\n" + \
"Media\t0\t*.{jpg,gif,png,wav,mp3,ogg,xcf,xpm}"),
"regexes" : prefs.Value(prefs.STRING, "CVS keywords\t0\t\$\\w+(:[^\\n$]+)?\$\n" + \
Index: meld-1.1.2/vc/monotone.py
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ meld-1.1.2/vc/monotone.py 2005-11-09 16:33:55.458016000 +0000
@@ -0,0 +1,211 @@
+### Copyright (C) 2002-2005 Stephen Kennedy <stevek gnome org>
+### Copyright (C) 2005 Daniel Thompson <daniel redfelineninja org uk>
+
+### Redistribution and use in source and binary forms, with or without
+### modification, are permitted provided that the following conditions
+### are met:
+###
+### 1. Redistributions of source code must retain the above copyright
+### notice, this list of conditions and the following disclaimer.
+### 2. Redistributions in binary form must reproduce the above copyright
+### notice, this list of conditions and the following disclaimer in the
+### documentation and/or other materials provided with the distribution.
+
+### THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+### IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+### OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+### IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+### INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+### NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+### DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+### THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+### (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+### THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import os
+import re
+import time
+import misc
+import _vc
+
+
+class Vc(_vc.Vc):
+ CMD = "monotone"
+ NAME = "Monotone"
+ PATCH_STRIP_NUM = 0
+ PATCH_INDEX_RE = "^[+]{3,3} ([^ ]*) [0-9a-f]{40,40}$"
+
+ def __init__(self, location):
+ self._tree_cache = None
+ while location != "/":
+ if os.path.isdir( "%s/MT" % location):
+ self.root = location
+ return
+ location = os.path.dirname(location)
+ raise ValueError
+
+ def commit_command(self, message):
+ return [self.CMD,"commit","-m",message]
+ def diff_command(self):
+ return [self.CMD,"diff"]
+ def update_command(self):
+ return [self.CMD,"update"]
+ def add_command(self, binary=0):
+ #if binary:
+ # return [self.CMD,"add","-kb"]
+ return [self.CMD,"add"]
+ def remove_command(self, force=0):
+ return [self.CMD,"drop"]
+ def revert_command(self):
+ return [self.CMD,"revert"]
+ def get_working_directory(self, workdir):
+ return self.root
+
+ def cache_inventory(self, rootdir):
+ self._tree_cache = self.lookup_tree()
+
+ def uncache_inventory(self):
+ self._tree_cache = None
+
+ def lookup_tree(self):
+ while 1:
+ try:
+ entries = os.popen("monotone automate inventory").read().split("\n")[:-1]
+ break
+ except OSError, e:
+ if e.errno != errno.EAGAIN:
+ raise
+
+ statemap = {
+ ' ' : _vc.STATE_NORMAL, # unchanged
+ ' P' : _vc.STATE_MODIFIED, # patched (contents changed)
+ ' U' : _vc.STATE_NONE, # unknown (exists on the filesystem but not tracked)
+ ' I' : _vc.STATE_IGNORED, # ignored (exists on the filesystem but excluded by lua hook)
+ ' M' : _vc.STATE_MISSING, # missing (exists in the manifest but not on the filesystem)
+
+ ' A ' : _vc.STATE_ERROR, # added (invalid, add should have associated patch)
+ ' AP' : _vc.STATE_NEW, # added and patched
+ ' AU' : _vc.STATE_ERROR, # added but unknown (invalid)
+ ' AI' : _vc.STATE_ERROR, # added but ignored (seems invalid, but may be possible)
+ ' AM' : _vc.STATE_EMPTY, # added but missing from the filesystem
+
+ ' R ' : _vc.STATE_NORMAL, # rename target
+ ' RP' : _vc.STATE_MODIFIED, # rename target and patched
+ ' RU' : _vc.STATE_ERROR, # rename target but unknown (invalid)
+ ' RI' : _vc.STATE_ERROR, # rename target but ignored (seems invalid, but may be possible?)
+ ' RM' : _vc.STATE_MISSING, # rename target but missing from the filesystem
+
+ 'D ' : _vc.STATE_REMOVED, # dropped
+ 'D P' : _vc.STATE_ERROR, # dropped and patched (invalid)
+ 'D U' : _vc.STATE_REMOVED, # dropped and unknown (still exists on the filesystem)
+ 'D I' : _vc.STATE_ERROR, # dropped and ignored (seems invalid, but may be possible?)
+ 'D M' : _vc.STATE_ERROR, # dropped and missing (invalid)
+
+ 'DA ' : _vc.STATE_ERROR, # dropped and added (invalid, add should have associated patch)
+ 'DAP' : _vc.STATE_NEW, # dropped and added and patched
+ 'DAU' : _vc.STATE_ERROR, # dropped and added but unknown (invalid)
+ 'DAI' : _vc.STATE_ERROR, # dropped and added but ignored (seems invalid, but may be possible?)
+ 'DAM' : _vc.STATE_MISSING, # dropped and added but missing from the filesystem
+
+ 'DR ' : _vc.STATE_NORMAL, # dropped and rename target
+ 'DRP' : _vc.STATE_MODIFIED, # dropped and rename target and patched
+ 'DRU' : _vc.STATE_ERROR, # dropped and rename target but unknown (invalid)
+ 'DRI' : _vc.STATE_ERROR, # dropped and rename target but ignored (invalid)
+ 'DRM' : _vc.STATE_MISSING, # dropped and rename target but missing from the filesystem
+
+ 'R ' : _vc.STATE_REMOVED, # rename source
+ 'R P' : _vc.STATE_ERROR, # rename source and patched (invalid)
+ 'R U' : _vc.STATE_REMOVED, # rename source and unknown (still exists on the filesystem)
+ 'R I' : _vc.STATE_ERROR, # rename source and ignored (seems invalid, but may be possible?)
+ 'R M' : _vc.STATE_ERROR, # rename source and missing (invalid)
+
+ 'RA ' : _vc.STATE_ERROR, # rename source and added (invalid, add should have associated patch)
+ 'RAP' : _vc.STATE_NEW, # rename source and added and patched
+ 'RAU' : _vc.STATE_ERROR, # rename source and added but unknown (invalid)
+ 'RAI' : _vc.STATE_ERROR, # rename source and added but ignored (seems invalid, but may be possible?)
+ 'RAM' : _vc.STATE_MISSING, # rename source and added but missing from the filesystem
+
+ 'RR ' : _vc.STATE_NEW, # rename source and target
+ 'RRP' : _vc.STATE_MODIFIED, # rename source and target and target patched
+ 'RRU' : _vc.STATE_ERROR, # rename source and target and target unknown (invalid)
+ 'RRI' : _vc.STATE_ERROR, # rename source and target and target ignored (seems invalid, but may be possible?)
+ 'RRM' : _vc.STATE_MISSING # rename source and target and target missing
+ }
+
+ tree_state = {}
+ for entry in entries:
+ mstate = entry[0:3]
+ rename_tracking = entry[4:7] # unused
+ fname = entry[8:]
+
+ if mstate in statemap:
+ state = statemap[mstate]
+ if state == _vc.STATE_ERROR:
+ print "WARNING: invalid state ('%s') reported by 'automate inventory'" % mstate
+ else:
+ state = _vc.STATE_ERROR
+ print "WARNING: impossible state ('%s') reported by 'automate inventory' (version skew?)" % mstate
+
+ tree_state[os.path.join(self.root, fname)] = state;
+
+ return tree_state
+
+ def get_tree(self):
+ if self._tree_cache is None:
+ return self.lookup_tree()
+ else:
+ return self._tree_cache
+
+ def lookup_files(self, dirs, files):
+ "files is array of (name, path). assume all files in same dir"
+ tree = self.get_tree()
+ if len(files):
+ directory = os.path.dirname(files[0][1])
+ elif len(dirs):
+ directory = os.path.dirname(dirs[0][1])
+ else:
+ return [],[]
+
+
+ retfiles = []
+ retdirs = []
+ vcfiles = {}
+
+ for path,state in tree.iteritems():
+ mydir, name = os.path.split(path)
+ if path.endswith('/'):
+ mydir, name = os.path.split(mydir)
+ if mydir != directory:
+ continue
+ rev, date, options, tag = "","","",""
+ if path.endswith('/'):
+ retdirs.append( _vc.Dir(path[:-1], name, state))
+ else:
+ retfiles.append( _vc.File(path, name, state, rev, tag, options) )
+ vcfiles[name] = 1
+ for f,path in files:
+ if f not in vcfiles:
+ # if the ignore MT filter is not enabled these will crop up
+ ignorelist = [ 'log', 'options', 'revision', 'work' ]
+
+ if f not in ignorelist:
+ print "WARNING: '%s' was not listed by 'automate inventory'" % f
+
+ # if it ain't listed by the inventory it's not under version
+ # control
+ state = _vc.STATE_NONE
+ retfiles.append( _vc.File(path, f, state, "") )
+ for d,path in dirs:
+ if d not in vcfiles:
+ # if the ignore MT filter is not enabled these will crop up
+ ignorelist = [ 'MT' ]
+ if d in ignorelist:
+ state = _vc.STATE_NONE
+ else:
+ # monotone does not version (or inventory) directories
+ # so these are always normal
+ state = _vc.STATE_NORMAL
+ retdirs.append( _vc.Dir(path, d, state) )
+ return retdirs, retfiles
+
+
Index: meld-1.1.2/AUTHORS
===================================================================
--- meld-1.1.2.orig/AUTHORS
+++ meld-1.1.2/AUTHORS
@@ -10,6 +10,7 @@ Dag Wieers (rpm packaging)
Martin Pool (localtime cvs patch)
Adam Muegge (patched cvsview to support svn)
Aaron Bentley (bzr vc plugin)
+Daniel Thompson (monotone vc plugin)
Translators
-----------
Index: meld-1.1.2/glade2/meldapp.glade
===================================================================
--- meld-1.1.2.orig/glade2/meldapp.glade
+++ meld-1.1.2/glade2/meldapp.glade
@@ -663,7 +663,17 @@
<property name="logo">pixmaps/icon.png</property>
<property name="copyright" translatable="yes">Copyright (C) 2002 Stephen Kennedy</property>
<property name="comments">http://meld.sourceforge.net</property>
- <property name="authors">Stephen Kennedy <stevek gnome org></property>
+ <property name="authors">Stephen Kennedy <stevek gnome org>
+
+With help from:
+
+Ross Burton (debian packaging, patches)
+Dag Wieers (rpm packaging)
+Martin Pool (localtime cvs patch)
+Adam Muegge (patched cvsview to support svn)
+Aaron Bentley (bzr vc plugin)
+Daniel Thompson (monotone vc plugin)
+</property>
<property name="translator_credits">Benoît Dejean (fr)
Takeshi Aihana (ja)
Dongsu Jang (ko)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]