~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/revfile.py

  • Committer: mbp at sourcefrog
  • Date: 2005-04-09 04:58:33 UTC
  • Revision ID: mbp@sourcefrog.net-20050409045833-7cf90a2f94b974591fbe8b91
new Revfile.add() dwim

Show diffs side-by-side

added added

removed removed

Lines of Context:
107
107
        idxname = basename + '.irev'
108
108
        dataname = basename + '.drev'
109
109
 
 
110
        self.idxpos = 0L
 
111
 
110
112
        idx_exists = os.path.exists(idxname)
111
113
        data_exists = os.path.exists(dataname)
112
114
 
130
132
                                   % (h, self.basename))
131
133
 
132
134
 
 
135
        
 
136
 
 
137
 
133
138
    def revision(self, rev):
134
139
        base = self.index[rev][0]
135
140
        start = self.index[base][1]
192
197
        
193
198
 
194
199
 
195
 
    def _add_full_text(self, text):
 
200
    def _add_full_text(self, text, text_sha):
196
201
        """Add a full text to the file.
197
202
 
198
203
        This is not compressed against any reference version.
199
204
 
200
205
        Returns the index for that text."""
201
 
        return self._add_common(sha.new(text).digest(), text, 0, _NO_RECORD)
202
 
 
203
 
 
204
 
    def _add_delta(self, text, base):
 
206
        return self._add_common(text_sha, text, 0, _NO_RECORD)
 
207
 
 
208
 
 
209
    def _add_delta(self, text, text_sha, base):
205
210
        """Add a text stored relative to a previous text."""
206
211
        self._check_index(base)
207
 
        text_sha = sha.new(text).digest()
208
212
        base_text = self.get(base)
209
213
        data = mdiff.bdiff(base_text, text)
210
214
        return self._add_common(text_sha, data, 0, base)
211
215
 
212
216
 
213
 
    def add(self, text, base=None):
214
 
        # TODO: check it's not already present?
215
 
        assert 0
 
217
    def add(self, text, base=_NO_RECORD):
 
218
        text_sha = sha.new(text).digest()
216
219
 
 
220
        idx = self.find_sha(text_sha)
 
221
        if idx != _NO_RECORD:
 
222
            return idx                  # already present
217
223
        
 
224
        if base == _NO_RECORD:
 
225
            return self._add_full_text(text, text_sha)
 
226
        else:
 
227
            return self._add_delta(self, text, text_sha, base)
 
228
 
 
229
 
218
230
    def addrevision(self, text, changeset):
219
231
        t = self.tip()
220
232
        n = t + 1
238
250
        open(self.datafile(), "a").write(data)
239
251
 
240
252
 
 
253
 
241
254
    def get(self, idx):
242
255
        idxrec = self[idx]
243
256
        base = idxrec[I_BASE]
360
373
        
361
374
 
362
375
    if cmd == 'add':
363
 
        new_idx = r._add_full_text(sys.stdin.read())
 
376
        new_idx = r.add(sys.stdin.read())
364
377
        print 'added idx %d' % new_idx
365
378
    elif cmd == 'add-delta':
366
379
        new_idx = r._add_delta(sys.stdin.read(), int(argv[2]))