[Pkg-bazaar-commits] ./bzr/unstable r206: new Revfile.add() dwim

mbp at sourcefrog.net mbp at sourcefrog.net
Fri Apr 10 07:51:26 UTC 2009


------------------------------------------------------------
revno: 206
committer: mbp at sourcefrog.net
timestamp: Sat 2005-04-09 14:58:33 +1000
message:
  new Revfile.add() dwim
modified:
  bzrlib/revfile.py
-------------- next part --------------
=== modified file 'bzrlib/revfile.py'
--- a/bzrlib/revfile.py	2005-04-09 04:38:18 +0000
+++ b/bzrlib/revfile.py	2005-04-09 04:58:33 +0000
@@ -107,6 +107,8 @@
         idxname = basename + '.irev'
         dataname = basename + '.drev'
 
+        self.idxpos = 0L
+
         idx_exists = os.path.exists(idxname)
         data_exists = os.path.exists(dataname)
 
@@ -130,6 +132,9 @@
                                    % (h, self.basename))
 
 
+        
+
+
     def revision(self, rev):
         base = self.index[rev][0]
         start = self.index[base][1]
@@ -192,29 +197,36 @@
         
 
 
-    def _add_full_text(self, text):
+    def _add_full_text(self, text, text_sha):
         """Add a full text to the file.
 
         This is not compressed against any reference version.
 
         Returns the index for that text."""
-        return self._add_common(sha.new(text).digest(), text, 0, _NO_RECORD)
-
-
-    def _add_delta(self, text, base):
+        return self._add_common(text_sha, text, 0, _NO_RECORD)
+
+
+    def _add_delta(self, text, text_sha, base):
         """Add a text stored relative to a previous text."""
         self._check_index(base)
-        text_sha = sha.new(text).digest()
         base_text = self.get(base)
         data = mdiff.bdiff(base_text, text)
         return self._add_common(text_sha, data, 0, base)
 
 
-    def add(self, text, base=None):
-        # TODO: check it's not already present?
-        assert 0
+    def add(self, text, base=_NO_RECORD):
+        text_sha = sha.new(text).digest()
 
+        idx = self.find_sha(text_sha)
+        if idx != _NO_RECORD:
+            return idx                  # already present
         
+        if base == _NO_RECORD:
+            return self._add_full_text(text, text_sha)
+        else:
+            return self._add_delta(self, text, text_sha, base)
+
+
     def addrevision(self, text, changeset):
         t = self.tip()
         n = t + 1
@@ -238,6 +250,7 @@
         open(self.datafile(), "a").write(data)
 
 
+
     def get(self, idx):
         idxrec = self[idx]
         base = idxrec[I_BASE]
@@ -360,7 +373,7 @@
         
 
     if cmd == 'add':
-        new_idx = r._add_full_text(sys.stdin.read())
+        new_idx = r.add(sys.stdin.read())
         print 'added idx %d' % new_idx
     elif cmd == 'add-delta':
         new_idx = r._add_delta(sys.stdin.read(), int(argv[2]))



More information about the Pkg-bazaar-commits mailing list