##// END OF EJS Templates
Get addremove to use new walk code....
Get addremove to use new walk code. It is now more verbose than it used to be. If given file names, it prints nothing, as before. But if given patterns or nothing, it prints the names of the files it is operating on, to remove that air of mystery. It also now operates at or below the current directory.

File last commit:

r582:df8a5a00 default
r766:b444a7e0 default
Show More
transaction.py
78 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
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
class transaction:
mpm@selenic.com
Remove all remaining print statements...
r582 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):
raise "journal already exists - run hg recover"
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
[PATCH] rename under the other OS...
r421 util.rename(self.journal, 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
mpm@selenic.com
Remove all remaining print statements...
r582 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:
mpm@selenic.com
Remove all remaining print statements...
r582 self.report("failed to truncate %s\n" % f)
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
self.entries = []
mpm@selenic.com
Remove all remaining print statements...
r582 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