Mercurial > hg
changeset 2262:3d48eb68f3ee
merge with crew.
author | Vadim Gelfer <vadim.gelfer@gmail.com> |
---|---|
date | Thu, 11 May 2006 08:48:52 -0700 |
parents | 20cf545b4725 (current diff) 99d6cae511f7 (diff) |
children | 2f64cbaa1e92 fdb699b5e132 |
files | mercurial/util.py |
diffstat | 15 files changed, 499 insertions(+), 70 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgtags Thu May 11 08:48:36 2006 -0700 +++ b/.hgtags Thu May 11 08:48:52 2006 -0700 @@ -10,3 +10,4 @@ 979c049974485125e1f9357f6bbe9c1b548a64c3 0.7 3a56574f329a368d645853e0f9e09472aee62349 0.8 6a03cff2b0f5d30281e6addefe96b993582f2eac 0.8.1 +35fb62a3a673d5322f6274a44ba6456e5e4b3b37 0.9
--- a/Makefile Thu May 11 08:48:36 2006 -0700 +++ b/Makefile Thu May 11 08:48:52 2006 -0700 @@ -2,7 +2,25 @@ export PREFIX PYTHON=python -all: local build doc +help: + @echo 'Commonly used make targets:' + @echo ' all - build program and documentation' + @echo ' install - install program and man pages to PREFIX ($(PREFIX))' + @echo ' install-home - install with setup.py install --home=HOME ($(HOME))' + @echo ' local - build C extensions for inplace usage' + @echo ' tests - run all tests in the automatic test suite' + @echo ' test-foo - run only specified tests (e.g. test-merge1)' + @echo ' dist - run all tests and create a source tarball in dist/' + @echo ' clean - remove files created by other targets' + @echo ' (except installed files or dist source tarball)' + @echo + @echo 'Example for a system-wide installation under /usr/local:' + @echo ' make all && su -c "make install" && hg version' + @echo + @echo 'Example for a local installation (usable in this directory):' + @echo ' make local && ./hg version' + +all: build doc local: $(PYTHON) setup.py build_ext -i @@ -16,6 +34,7 @@ clean: -$(PYTHON) setup.py clean --all # ignore errors of this command find . -name '*.py[co]' -exec rm -f '{}' ';' + rm -f MANIFEST mercurial/__version__.py mercurial/*.so tests/*.err $(MAKE) -C doc clean install: all @@ -38,5 +57,5 @@ cd tests && $(PYTHON) run-tests.py $@ -.PHONY: all local build doc clean install install-home dist dist-notests tests +.PHONY: help all local build doc clean install install-home dist dist-notests tests
--- a/mercurial/bundlerepo.py Thu May 11 08:48:36 2006 -0700 +++ b/mercurial/bundlerepo.py Thu May 11 08:48:52 2006 -0700 @@ -50,7 +50,7 @@ continue for p in (p1, p2): if not p in self.nodemap: - raise RevlogError(_("unknown parent %s") % short(p1)) + raise revlog.RevlogError(_("unknown parent %s") % short(p1)) if linkmapper is None: link = n else: @@ -76,12 +76,12 @@ return False return rev in self.basemap def bundlebase(self, rev): return self.basemap[rev] - def chunk(self, rev, df=None): + def chunk(self, rev, df=None, cachelen=4096): # Warning: in case of bundle, the diff is against bundlebase, # not against rev - 1 # XXX: could use some caching if not self.bundle(rev): - return revlog.revlog.chunk(self, rev) + return revlog.revlog.chunk(self, rev, df, cachelen) self.bundlefile.seek(self.start(rev)) return self.bundlefile.read(self.length(rev)) @@ -123,8 +123,8 @@ p1, p2 = self.parents(node) if node != revlog.hash(text, p1, p2): - raise RevlogError(_("integrity check failed on %s:%d") - % (self.datafile, self.rev(node))) + raise revlog.RevlogError(_("integrity check failed on %s:%d") + % (self.datafile, self.rev(node))) self.cache = (node, self.rev(node), text) return text @@ -160,7 +160,6 @@ def __init__(self, ui, path, bundlename): localrepo.localrepository.__init__(self, ui, path) f = open(bundlename, "rb") - s = util.fstat(f) self.bundlefile = f header = self.bundlefile.read(6) if not header.startswith("HG"):
--- a/mercurial/commands.py Thu May 11 08:48:36 2006 -0700 +++ b/mercurial/commands.py Thu May 11 08:48:52 2006 -0700 @@ -756,13 +756,20 @@ def backout(ui, repo, rev, **opts): '''reverse effect of earlier changeset - Commit the backed out changes as a new changeset. + Commit the backed out changes as a new changeset. The new + changeset is a child of the backed out changeset. If you back out a changeset other than the tip, a new head is - created. The --merge option remembers the parent of the working - directory before starting the backout, then merges the new head - with it afterwards, to save you from doing this by hand. The - result of this merge is not committed, as for a normal merge.''' + created. This head is the parent of the working directory. If + you back out an old changeset, your working directory will appear + old after the backout. You should merge the backout changeset + with another head. + + The --merge option remembers the parent of the working directory + before starting the backout, then merges the new head with that + changeset afterwards. This saves you from doing the merge by + hand. The result of this merge is not committed, as for a normal + merge.''' bail_if_changed(repo) op1, op2 = repo.dirstate.parents() @@ -3021,7 +3028,7 @@ "recover": (recover, [], _('hg recover')), "^remove|rm": (remove, - [('', 'after', None, _('record remove that has already occurred')), + [('A', 'after', None, _('record remove that has already occurred')), ('f', 'force', None, _('remove file even if modified')), ('I', 'include', [], _('include names matching the given patterns')), ('X', 'exclude', [], _('exclude names matching the given patterns'))], @@ -3096,7 +3103,7 @@ [('u', 'update', None, _('update the working directory to tip after unbundle'))], _('hg unbundle [-u] FILE')), - "undo": (undo, [], _('hg undo')), + "debugundo|undo": (undo, [], _('hg undo')), "^update|up|checkout|co": (update, [('b', 'branch', '', _('checkout the head of a specific branch')),
--- a/mercurial/localrepo.py Thu May 11 08:48:36 2006 -0700 +++ b/mercurial/localrepo.py Thu May 11 08:48:52 2006 -0700 @@ -1544,8 +1544,9 @@ " with %d changes to %d files%s\n") % (changesets, revisions, files, heads)) - self.hook('pretxnchangegroup', throw=True, - node=hex(self.changelog.node(cor+1)), source=srctype) + if changesets > 0: + self.hook('pretxnchangegroup', throw=True, + node=hex(self.changelog.node(cor+1)), source=srctype) tr.close()
--- a/mercurial/mdiff.py Thu May 11 08:48:36 2006 -0700 +++ b/mercurial/mdiff.py Thu May 11 08:48:52 2006 -0700 @@ -9,6 +9,15 @@ import struct, bdiff, util, mpatch demandload(globals(), "re") +def splitnewlines(text): + '''like str.splitlines, but only split on newlines.''' + lines = [l + '\n' for l in text.split('\n')] + if lines: + if lines[-1] == '\n': + lines.pop() + else: + lines[-1] = lines[-1][:-1] + return lines def unidiff(a, ad, b, bd, fn, r=None, text=False, showfunc=False, ignorews=False): @@ -19,7 +28,7 @@ if not text and (util.binary(a) or util.binary(b)): l = ['Binary file %s has changed\n' % fn] elif not a: - b = b.splitlines(1) + b = splitnewlines(b) if a is None: l1 = "--- %s\t%s\n" % ("/dev/null", epoch) else: @@ -28,7 +37,7 @@ l3 = "@@ -0,0 +1,%d @@\n" % len(b) l = [l1, l2, l3] + ["+" + e for e in b] elif not b: - a = a.splitlines(1) + a = splitnewlines(a) l1 = "--- %s\t%s\n" % ("a/" + fn, ad) if b is None: l2 = "+++ %s\t%s\n" % ("/dev/null", epoch) @@ -37,8 +46,8 @@ l3 = "@@ -1,%d +0,0 @@\n" % len(a) l = [l1, l2, l3] + ["-" + e for e in a] else: - al = a.splitlines(1) - bl = b.splitlines(1) + al = splitnewlines(a) + bl = splitnewlines(b) l = list(bunidiff(a, b, al, bl, "a/" + fn, "b/" + fn, showfunc=showfunc, ignorews=ignorews)) if not l: return ""
--- a/mercurial/revlog.py Thu May 11 08:48:36 2006 -0700 +++ b/mercurial/revlog.py Thu May 11 08:48:52 2006 -0700 @@ -87,6 +87,13 @@ """ this class avoids the need to parse the entirety of large indices """ + + # lazyparser is not safe to use on windows if win32 extensions not + # available. it keeps file handle open, which make it not possible + # to break hardlinks on local cloned repos. + safe_to_use = os.name != 'nt' or (not util.is_win_9x() and + hasattr(util, 'win32api')) + def __init__(self, dataf, size, indexformat, shaoffset): self.dataf = dataf self.format = indexformat @@ -362,18 +369,14 @@ shaoffset = ngshaoffset if i: - if not self.inlinedata() and st and st.st_size > 10000: + if (lazyparser.safe_to_use and not self.inlinedata() and + st and st.st_size > 10000): # big index, let's parse it on demand parser = lazyparser(f, st.st_size, self.indexformat, shaoffset) self.index = lazyindex(parser) self.nodemap = lazymap(parser) else: - i = f.read() - self.parseindex(i) - if self.inlinedata(): - # we've already got the entire data file read in, save it - # in the chunk data - self.chunkcache = (0, i) + self.parseindex(f, st) if self.version != REVLOGV0: e = list(self.index[0]) type = self.ngtype(e[0]) @@ -384,22 +387,49 @@ self.index = [] - def parseindex(self, data): + def parseindex(self, fp, st): s = struct.calcsize(self.indexformat) - l = len(data) self.index = [] self.nodemap = {nullid: -1} inline = self.inlinedata() - off = 0 n = 0 - while off < l: - e = struct.unpack(self.indexformat, data[off:off + s]) - self.index.append(e) - self.nodemap[e[-1]] = n - n += 1 - off += s - if inline: - off += e[1] + leftover = None + while True: + if st: + data = fp.read(65536) + else: + # hack for httprangereader, it doesn't do partial reads well + data = fp.read() + if not data: + break + if n == 0 and self.inlinedata(): + # cache the first chunk + self.chunkcache = (0, data) + off = 0 + l = len(data) + while off < l: + if l - off < s: + leftover = data[off:] + break + if leftover: + cur = leftover + data[off:off + s - len(leftover)] + off += s - len(leftover) + leftover = None + else: + cur = data[off:off + s] + off += s + e = struct.unpack(self.indexformat, cur) + self.index.append(e) + self.nodemap[e[-1]] = n + n += 1 + if inline: + off += e[1] + if off > l: + # some things don't seek well, just read it + fp.read(off - l) + if not st: + break + def ngoffset(self, q): if q & 0xFFFF:
--- a/mercurial/util.py Thu May 11 08:48:36 2006 -0700 +++ b/mercurial/util.py Thu May 11 08:48:52 2006 -0700 @@ -489,6 +489,13 @@ posixfile = file +def is_win_9x(): + '''return true if run on windows 95, 98 or me.''' + try: + return sys.getwindowsversion()[3] == 1 + except AttributeError: + return os.name == 'nt' and 'command' in os.environ.get('comspec', '') + # Platform specific variants if os.name == 'nt': demandload(globals(), "msvcrt") @@ -570,6 +577,8 @@ try: # override functions with win32 versions if possible from util_win32 import * + if not is_win_9x(): + posixfile = posixfile_nt except ImportError: pass
--- a/mercurial/util_win32.py Thu May 11 08:48:36 2006 -0700 +++ b/mercurial/util_win32.py Thu May 11 08:48:52 2006 -0700 @@ -183,11 +183,11 @@ filename = win32process.GetModuleFileNameEx(proc, 0) return [os.path.join(os.path.dirname(filename), 'mercurial.ini')] -class posixfile(object): +class posixfile_nt(object): '''file object with posix-like semantics. on windows, normal files can not be deleted or renamed if they are open. must open with win32file.FILE_SHARE_DELETE. this flag does not exist on - windows <= nt.''' + windows < nt, so do not use this class there.''' # tried to use win32file._open_osfhandle to pass fd to os.fdopen, # but does not work at all. wrap win32 file api instead. @@ -220,6 +220,10 @@ self.name = name self.mode = mode + def __iter__(self): + for line in self.read().splitlines(True): + yield line + def read(self, count=-1): try: cs = cStringIO.StringIO()
--- a/tests/run-tests.py Thu May 11 08:48:36 2006 -0700 +++ b/tests/run-tests.py Thu May 11 08:48:52 2006 -0700 @@ -34,10 +34,25 @@ print m, print +def splitnewlines(text): + '''like str.splitlines, but only split on newlines. + keep line endings.''' + i = 0 + lines = [] + while True: + n = text.find('\n', i) + if n == -1: + last = text[i:] + if last: + lines.append(last) + return lines + lines.append(text[i:n+1]) + i = n + 1 + def show_diff(expected, output): for line in difflib.unified_diff(expected, output, "Expected output", "Test output", lineterm=''): - print line + sys.stdout.write(line) def find_program(program): """Search PATH for a executable program""" @@ -125,7 +140,7 @@ vlog("# Running: "+cmd) os.system(cmd) -def run(cmd, split_lines=True): +def run(cmd): """Run command in a sub-process, capturing the output (stdout and stderr). Return the exist code, and output.""" # TODO: Use subprocess.Popen if we're running on Python 2.4 @@ -141,9 +156,7 @@ proc.tochild.close() output = proc.fromchild.read() ret = proc.wait() - if split_lines: - output = output.splitlines() - return ret, output + return ret, splitnewlines(output) def run_one(test): vlog("# Test", test) @@ -180,22 +193,23 @@ # If reference output file exists, check test output against it if os.path.exists(ref): f = open(ref, "r") - ref_out = f.read().splitlines() + ref_out = splitnewlines(f.read()) f.close() - if out != ref_out: - diffret = 1 - print "\nERROR: %s output changed" % (test) - show_diff(ref_out, out) + else: + ref_out = [''] + if out != ref_out: + diffret = 1 + print "\nERROR: %s output changed" % (test) + show_diff(ref_out, out) if ret: print "\nERROR: %s failed with error code %d" % (test, ret) elif diffret: ret = diffret if ret != 0: # Save errors to a file for diagnosis - f = open(err, "w") + f = open(err, "wb") for line in out: f.write(line) - f.write("\n") f.close() os.chdir(TESTDIR) @@ -228,24 +242,28 @@ COVERAGE_FILE = os.path.join(TESTDIR, ".coverage") try: - install_hg() + try: + install_hg() - tests = 0 - failed = 0 + tests = 0 + failed = 0 - if len(args) == 0: - args = os.listdir(".") - for test in args: - if test.startswith("test-"): - if '~' in test or re.search(r'\.(out|err)$', test): - continue - if not run_one(test): - failed += 1 - tests += 1 + if len(args) == 0: + args = os.listdir(".") + for test in args: + if test.startswith("test-"): + if '~' in test or re.search(r'\.(out|err)$', test): + continue + if not run_one(test): + failed += 1 + tests += 1 - print "\n# Ran %d tests, %d failed." % (tests, failed) - if coverage: - output_coverage() + print "\n# Ran %d tests, %d failed." % (tests, failed) + if coverage: + output_coverage() + except KeyboardInterrupt: + failed = True + print "\ninterrupted!" finally: cleanup_exit()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-diff-newlines Thu May 11 08:48:52 2006 -0700 @@ -0,0 +1,8 @@ +#!/bin/sh + +hg init +python -c 'print "confuse str.splitlines\nembedded\rnewline"' > a +hg ci -Ama -d '1 0' +echo clean diff >> a +hg ci -mb -d '2 0' +hg diff -r0 -r1
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-diff-newlines.out Thu May 11 08:48:52 2006 -0700 @@ -0,0 +1,8 @@ +adding a +diff -r 107ba6f817b5 -r 310ce7989cdc a +--- a/a Thu Jan 01 00:00:01 1970 +0000 ++++ b/a Thu Jan 01 00:00:02 1970 +0000 +@@ -1,2 +1,3 @@ confuse str.splitlines + confuse str.splitlines + embedded newline ++clean diff
--- a/tests/test-help.out Thu May 11 08:48:36 2006 -0700 +++ b/tests/test-help.out Thu May 11 08:48:52 2006 -0700 @@ -77,7 +77,6 @@ tags list repository tags tip show the tip revision unbundle apply a changegroup file - undo undo the last commit or pull (DEPRECATED) update update or merge working directory verify verify the integrity of the repository version output version and copyright information @@ -120,7 +119,6 @@ tags list repository tags tip show the tip revision unbundle apply a changegroup file - undo undo the last commit or pull (DEPRECATED) update update or merge working directory verify verify the integrity of the repository version output version and copyright information
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-incoming-outgoing Thu May 11 08:48:52 2006 -0700 @@ -0,0 +1,46 @@ +#!/bin/sh + +mkdir test +cd test +hg init +for i in 0 1 2 3 4 5 6 7 8; do + echo $i >> foo + hg commit -A -m $i -d "1000000 0" +done +hg verify +hg serve -p 20059 -d --pid-file=hg.pid +cd .. + +hg init new +# http incoming +http_proxy= hg -R new incoming http://localhost:20059/ +# local incoming +hg -R new incoming test + +# test with --bundle +http_proxy= hg -R new incoming --bundle test.hg http://localhost:20059/ +hg -R new incoming --bundle test2.hg test + +# test the resulting bundles +hg init temp +hg init temp2 +hg -R temp unbundle test.hg +hg -R temp2 unbundle test2.hg +hg -R temp tip +hg -R temp2 tip + +rm -rf temp temp2 new + +# test outgoing +hg clone test test-dev +cd test-dev +for i in 9 10 11 12 13; do + echo $i >> foo + hg commit -A -m $i -d "1000000 0" +done +hg verify +cd .. +hg -R test-dev outgoing test +http_proxy= hg -R test-dev outgoing http://localhost:20059/ + +kill `cat test/hg.pid`
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-incoming-outgoing.out Thu May 11 08:48:52 2006 -0700 @@ -0,0 +1,272 @@ +adding foo +checking changesets +checking manifests +crosschecking files in changesets and manifests +checking files +1 files, 9 changesets, 9 total revisions +changeset: 0:9cb21d99fe27 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 0 + +changeset: 1:d717f5dfad6a +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 1 + +changeset: 2:c0d6b86da426 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 2 + +changeset: 3:dfacbd43b3fe +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 3 + +changeset: 4:1f3a964b6022 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 4 + +changeset: 5:c028bcc7a28a +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 5 + +changeset: 6:a0c0095f3389 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 6 + +changeset: 7:d4be65f4e891 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 7 + +changeset: 8:92b83e334ef8 +tag: tip +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 8 + +changeset: 0:9cb21d99fe27 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 0 + +changeset: 1:d717f5dfad6a +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 1 + +changeset: 2:c0d6b86da426 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 2 + +changeset: 3:dfacbd43b3fe +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 3 + +changeset: 4:1f3a964b6022 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 4 + +changeset: 5:c028bcc7a28a +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 5 + +changeset: 6:a0c0095f3389 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 6 + +changeset: 7:d4be65f4e891 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 7 + +changeset: 8:92b83e334ef8 +tag: tip +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 8 + +changeset: 0:9cb21d99fe27 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 0 + +changeset: 1:d717f5dfad6a +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 1 + +changeset: 2:c0d6b86da426 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 2 + +changeset: 3:dfacbd43b3fe +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 3 + +changeset: 4:1f3a964b6022 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 4 + +changeset: 5:c028bcc7a28a +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 5 + +changeset: 6:a0c0095f3389 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 6 + +changeset: 7:d4be65f4e891 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 7 + +changeset: 8:92b83e334ef8 +tag: tip +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 8 + +changeset: 0:9cb21d99fe27 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 0 + +changeset: 1:d717f5dfad6a +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 1 + +changeset: 2:c0d6b86da426 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 2 + +changeset: 3:dfacbd43b3fe +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 3 + +changeset: 4:1f3a964b6022 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 4 + +changeset: 5:c028bcc7a28a +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 5 + +changeset: 6:a0c0095f3389 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 6 + +changeset: 7:d4be65f4e891 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 7 + +changeset: 8:92b83e334ef8 +tag: tip +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 8 + +adding changesets +adding manifests +adding file changes +added 9 changesets with 9 changes to 1 files +(run 'hg update' to get a working copy) +adding changesets +adding manifests +adding file changes +added 9 changesets with 9 changes to 1 files +(run 'hg update' to get a working copy) +changeset: 8:92b83e334ef8 +tag: tip +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 8 + +changeset: 8:92b83e334ef8 +tag: tip +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 8 + +1 files updated, 0 files merged, 0 files removed, 0 files unresolved +checking changesets +checking manifests +crosschecking files in changesets and manifests +checking files +1 files, 14 changesets, 14 total revisions +searching for changes +changeset: 9:3741c3ad1096 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 9 + +changeset: 10:de4143c8d9a5 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 10 + +changeset: 11:0e1c188b9a7a +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 11 + +changeset: 12:251354d0fdd3 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 12 + +changeset: 13:bdaadd969642 +tag: tip +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 13 + +searching for changes +changeset: 9:3741c3ad1096 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 9 + +changeset: 10:de4143c8d9a5 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 10 + +changeset: 11:0e1c188b9a7a +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 11 + +changeset: 12:251354d0fdd3 +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 12 + +changeset: 13:bdaadd969642 +tag: tip +user: test +date: Mon Jan 12 13:46:40 1970 +0000 +summary: 13 +