##// END OF EJS Templates
Add revlog.strip to truncate away revisions....
Add revlog.strip to truncate away revisions. This updates the revlog data structures for index and nodemap in place so the .d and .i files don't need to be reread after stripping away a revision.

File last commit:

r1402:9d2c2e6b default
r1535:7ae0ce7a default
Show More
transaction.py
79 lines | 2.2 KiB | text/x-python | PythonLexer
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 # transaction.py - simple journalling scheme for mercurial
#
# This transaction scheme is intended to gracefully handle program
# errors and interruptions. More serious failures like system crashes
# can be recovered with an fsck-like tool. As the whole repository is
# effectively log-structured, this should amount to simply truncating
# anything that isn't referenced in the changelog.
#
# Copyright 2005 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.
import os
mpm@selenic.com
[PATCH] rename under the other OS...
r421 import util
Benoit Boissinot
i18n first part: make '_' available for files who need it
r1400 from i18n import gettext as _
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
class transaction:
benoit.boissinot@ens-lyon.fr
pep-0008 cleanup...
r1062 def __init__(self, report, opener, journal, after=None):
mpm@selenic.com
Implement recover and undo commands...
r162 self.journal = None
# abort here if the journal already exists
if os.path.exists(journal):
Benoit Boissinot
i18n part2: use '_' for all strings who are part of the user interface
r1402 raise AssertionError(_("journal already exists - run hg recover"))
mpm@selenic.com
Implement recover and undo commands...
r162
mpm@selenic.com
Remove all remaining print statements...
r582 self.report = report
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 self.opener = opener
mpm@selenic.com
Beginnings of transaction undo support
r95 self.after = after
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 self.entries = []
mpm@selenic.com
Fix multiple changes to file per transaction
r42 self.map = {}
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 self.journal = journal
self.file = open(self.journal, "w")
def __del__(self):
mpm@selenic.com
transaction: __del__ should do nothing if the journal already exists...
r558 if self.journal:
if self.entries: self.abort()
self.file.close()
try: os.unlink(self.journal)
except: pass
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
def add(self, file, offset):
mpm@selenic.com
Fix multiple changes to file per transaction
r42 if file in self.map: return
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 self.entries.append((file, offset))
mpm@selenic.com
Fix multiple changes to file per transaction
r42 self.map[file] = 1
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 # add enough data to the journal to do the truncate
self.file.write("%s\0%d\n" % (file, offset))
self.file.flush()
def close(self):
self.file.close()
self.entries = []
mpm@selenic.com
Beginnings of transaction undo support
r95 if self.after:
mpm@selenic.com
Fix undo after aborted commit bug...
r785 self.after()
mpm@selenic.com
Beginnings of transaction undo support
r95 else:
os.unlink(self.journal)
mpm@selenic.com
transaction: nullify journal after close()...
r573 self.journal = None
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
def abort(self):
if not self.entries: return
Benoit Boissinot
i18n part2: use '_' for all strings who are part of the user interface
r1402 self.report(_("transaction abort!\n"))
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
for f, o in self.entries:
mpm@selenic.com
Warn if we fail to truncate something
r108 try:
self.opener(f, "a").truncate(o)
except:
Benoit Boissinot
i18n part2: use '_' for all strings who are part of the user interface
r1402 self.report(_("failed to truncate %s\n") % f)
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
self.entries = []
Benoit Boissinot
i18n part2: use '_' for all strings who are part of the user interface
r1402 self.report(_("rollback completed\n"))
mpm@selenic.com
Whitespace cleanups...
r515
mpm@selenic.com
Implement recover and undo commands...
r162 def rollback(opener, file):
for l in open(file).readlines():
f, o = l.split('\0')
opener(f, "a").truncate(int(o))
os.unlink(file)
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0