[Checkins] SVN: z3c.vcsync/trunk/src/z3c/vcsync/svn.py Improved svn integration, though still isn't correct in the way it

Martijn Faassen faassen at infrae.com
Wed Jul 4 20:08:20 EDT 2007


Log message for revision 77441:
  Improved svn integration, though still isn't correct in the way it
  retrieves log info.
  

Changed:
  U   z3c.vcsync/trunk/src/z3c/vcsync/svn.py

-=-
Modified: z3c.vcsync/trunk/src/z3c/vcsync/svn.py
===================================================================
--- z3c.vcsync/trunk/src/z3c/vcsync/svn.py	2007-07-05 00:07:57 UTC (rev 77440)
+++ z3c.vcsync/trunk/src/z3c/vcsync/svn.py	2007-07-05 00:08:19 UTC (rev 77441)
@@ -16,20 +16,40 @@
 
     def __init__(self, path):
         super(SvnCheckout, self).__init__(path)
-        self._log_info = {'D':[], 'A':[], 'M':[]}
-      
-    def up(self):
-        original_rev = self.path.status().rev
+        self._log_info = {'R':[], 'A':[], 'M':[]}
 
+    def _repository_url(self):
+        prefix = 'Repository Root: '
+        lines = self.path._svn('info').splitlines()
+        for line in lines:
+            if line.startswith(prefix):
+                break
+        return line[len(prefix):].strip()
+
+    def _checkout_path(self):
+        """Path to checkout from SVN's perspective.
+        """
+        checkout_url = self.path.info().url
+        repos_url = self._repository_url()
+        return checkout_url[len(repos_url):]
+    
+    def up(self):        
+        original_rev = int(self.path.status().rev)
+
         self.path.update()
+    
+        now_rev = int(self.path.status().rev)
+        logs = self.path.log(now_rev, original_rev, verbose=True)
 
-        now_rev = self.path.status().rev
-        logs = self.path.log(now_rev, original_rev + 1, verbose=True)
-        log_info = {'D': [], 'A': [], 'M':[]}
+        checkout_path = self._checkout_path()
+        log_info = {'R': [], 'A': [], 'M':[]}
         for log in logs:
-            entries = log_info[log.action]
             for p in log.strpaths:
-                entries.append(py.path.local(p.strpath))
+                rel_path = p.strpath[len(checkout_path):]
+                steps = rel_path.split(self.path.sep)
+                # construct py.path to file
+                path = self.path.join(*steps)
+                log_info[p.action].append(path)
         self._log_info = log_info
         
     def resolve(self):
@@ -42,7 +62,7 @@
         return self._log_info['A']
     
     def deleted(self):
-        return self._log_info['D']
+        return self._log_info['R']
 
     def modified(self):
         return self._log_info['M']



More information about the Checkins mailing list