##// END OF EJS Templates
Make sure the repository names don't have slashes at the at or else in some...
Make sure the repository names don't have slashes at the at or else in some cases env[path_info] will not find an defined repository. REQUEST_URI can contain a query_string appending the repository name would lead to corrupt urls.

File last commit:

r1073:7b35a980 default
r1181:4f5001f5 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:
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):
Bart Trojanowski
[PATCH] raise exceptions with Exception subclasses...
r1073 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
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