...
 
Commits (7)
......@@ -1672,8 +1672,8 @@ def __str__(self):
class FileOp(object):
"Represent a primitive operation on a file."
__slots__ = ("repo", "op", "committish", "source", "target",
"mode", "path", "ref", "inline",
"sourcedelete", "targetdelete")
"mode", "path", "ref", "inline", "deletehook",
"sourcedelete", "targetdelete", "color")
__hash__ = None
modify_re = re.compile(r"(M) ([0-9]+) (\S+) (.*)")
sortkey_sentinel = chr(ord(b"/") + 1)
......@@ -1687,8 +1687,13 @@ def __init__(self, repo):
self.path = None
self.ref = None
self.inline = None
self.deletehook = None # Hook used during deletion operations
self.color = None
def setOp(self, op):
self.op = op
def index(self):
"Our 0-origin index in our repo."
return self.repo.index(self)
@staticmethod
def sortkey(fileop):
"Compute a key suited for sorting FileOps as git fast-export does."
......@@ -1762,10 +1767,12 @@ def relevant(self, other):
return True
else:
return self.paths() & other.paths()
def dump(self, vcs=None, options=None):
def dump(self, vcs=None, options=None, realized=None, internals=None):
"Dump this fileop in import-stream format."
pacify_pylint(vcs)
pacify_pylint(options)
pacify_pylint(realized)
pacify_pylint(internals)
if self.op == b"M":
showmode = self.mode
if isinstance(self.mode, int):
......@@ -1793,7 +1800,13 @@ def dump(self, vcs=None, options=None):
parts = [self.op]
else:
raise Fatal(b"unexpected fileop %s while writing" % self.op)
return b"".join(parts)
try:
last = not isinstance(self.repo.events[self.index()+1], FileOp)
except IndexError:
last = True
if last and not "no-nl-after-commit" in self.repo.export_style():
parts.append(b"\n")
return b"".join(parts) + "\n"
def __str__(self):
return self.dump(self.repo.vcs)
......@@ -1811,7 +1824,7 @@ def callout(self):
class Commit(object):
"Generic commit object."
__slots__ = ("repo", "mark", "authors", "committer", "comment",
"branch", "fileops", "properties", "filemap", "color",
"branch", "properties", "filemap", "color",
"legacy_id", "common", "splits", "deletehook", "attachments",
"_parent_nodes", "_child_nodes", "_pathset")
__hash__ = None
......@@ -1822,7 +1835,6 @@ def __init__(self, repo=None):
self.committer = None # Person responsible for committing it.
self.comment = None # Commit comment
self.branch = None # branch name
self.fileops = [] # blob and file operation list
self.properties = collections.OrderedDict() # commit properties (extension)
self.filemap = None
self.color = None
......@@ -1853,25 +1865,43 @@ def set_branch(self, branch):
self.branch = intern(branch)
def operations(self):
"Fileops associated with this commit; hides how this is represented."
return self.fileops
i = self.index() + 1
ops = []
try:
while isinstance(self.repo.events[i], FileOp):
ops.append(self.repo.events[i])
i += 1
except IndexError:
pass
return ops
def set_operations(self, ops):
"Replace the set of fileops associated with this commit."
self.fileops = ops
i = self.index() + 1
j = 0
try:
while isinstance(self.repo.events[i + j], FileOp):
j += 1
except IndexError:
pass
self.repo.events = self.repo.events[:i] + ops + self.repo.events[i+j:]
if j > 0:
self.repo.declare_sequence_mutation()
def append_operation(self, op):
"Append to the set of fileops associated with this commit."
self.fileops.append(op)
self.set_operations(self.operations() + [op])
def prepend_operation(self, op):
"Prepend to the set of fileops associated with this commit."
self.fileops.insert(0, op)
self.set_operations([op] + self.operations())
def sort_operations(self):
"Sort fileops the same way git-fast-export does."
self.fileops.sort(key=FileOp.sortkey)
ops = self.operations()
ops.sort(key=FileOp.sortkey)
self.set_operations(ops)
def clone(self, repo=None):
"Clone this commit, without its fileops, color and children."
c = copy.copy(self)
c.committer = copy.deepcopy(self.committer)
c.authors = copy.deepcopy(self.authors)
c.set_operations([])
c.filemap = None
c._pathset = None
c.color = None
......@@ -2261,7 +2291,6 @@ def canonicalize(self):
# Only files touched by non-deleteall ops might disappear.
check_delete = paths
new_ops = []
self.set_operations(new_ops)
for path in check_delete:
if path in parent and path not in current:
fileop = FileOp(self.repo)
......@@ -2280,6 +2309,7 @@ def canonicalize(self):
if mark == "inline":
fileop.inline = inline
new_ops.append(fileop)
self.set_operations(new_ops)
# Finishing touches:
self.sort_operations()
self._pathset = None
......@@ -2403,8 +2433,7 @@ def dump(self, vcs=None, options=None, realized=None, internals=None):
parts.append(b"property %s\n" % name)
else:
parts.append(b"property %s %d %s\n" % (name, len(str(value)), str(value)))
parts.extend(op.dump(vcs) + b"\n" for op in self.operations())
if not "no-nl-after-commit" in self.repo.export_style():
if not self.operations() and not "no-nl-after-commit" in self.repo.export_style():
parts.append(b"\n")
return b"".join(parts)
def __str__(self):
......@@ -3249,6 +3278,7 @@ def fast_import(self, fp, options, progress=False):
commitbegin = self.import_line
commit = Commit(self.repo)
commit.set_branch(line.split()[1])
commitops = []
while True:
line = self.fi_readline()
if not line:
......@@ -3312,9 +3342,9 @@ def fast_import(self, fp, options, progress=False):
commit.add_parent(mark)
# Handling of file ops begins.
elif line[0] in (b"C", b"D", b"R"):
commit.append_operation(FileOp(self.repo).parse(line))
commitops.append(FileOp(self.repo).parse(line))
elif line == b"deleteall\n":
commit.append_operation(FileOp(self.repo).parse(b"deleteall"))
commitops.append(FileOp(self.repo).parse(b"deleteall"))
elif line[0] == b"M":
fileop = FileOp(self.repo).parse(line)
if fileop.ref != 'inline':
......@@ -3325,7 +3355,7 @@ def fast_import(self, fp, options, progress=False):
# submodule link.
if fileop.mode != b"160000":
self.error(b"ref %s could not be resolved" % fileop.ref)
commit.append_operation(fileop)
commitops.append(fileop)
if fileop.mode == b"160000":
# This is a submodule link. The ref
# field is a SHA1 hash and the path
......@@ -3338,7 +3368,7 @@ def fast_import(self, fp, options, progress=False):
self.fi_parse_fileop(fileop)
elif line[0] == b"N":
fileop = FileOp(self.repo).parse(line)
commit.append_operation(fileop)
commitops.append(fileop)
self.fi_parse_fileop(fileop)
self.repo.inlines += 1
# Handling of file ops ends.
......@@ -3366,6 +3396,7 @@ def fast_import(self, fp, options, progress=False):
self.warn(b"unmarked commit")
self.repo.addEvent(commit)
commitcount += 1
commit.set_operations(commitops)
baton.twirl()
elif line.startswith(b"reset"):
reset = Reset(self.repo)
......@@ -4030,19 +4061,19 @@ def last_relevant_commit(max_rev, path,
newcommits = []
commit.legacy_id = revision
if len(other_ops) <= 1:
newcommits.append(commit)
# In the ordinary case, we can assign all non-deleteall fileops
# to the base commit.
self.repo.legacy_map[b"SVN:%s" % commit.legacy_id] = commit
try:
commit.common, stage = next(oplist)
commit.set_operations(stage)
newcommits += stage
commit.invalidate_pathset_cache()
except StopIteration:
commit.common = os.path.commonprefix([node.path for node in record.nodes])
commit.set_mark(self.__newmark())
if debug_enable(DEBUG_EXTRACT):
announce(b"r%s gets mark %s" % (revision, commit.mark))
newcommits.append(commit)
# If the commit is mixed, or there are deletealls left over,
# handle that.
oplist = sorted(oplist, key=operator.itemgetter(0))
......@@ -4054,17 +4085,14 @@ def last_relevant_commit(max_rev, path,
self.repo.legacy_map["SVN:%s" % split.legacy_id] = split
split.comment += "\n[[Split portion of a mixed commit.]]\n"
split.set_mark(self.__newmark())
split.set_operations(fileops)
split.invalidate_pathset_cache()
newcommits.append(split)
newcommits += fileops
# The revision is truly mixed if there is more than one clique
# not consisting entirely of deleteall operations.
if len(other_ops) > 1:
# Store the last used split id
split_commits[revision] = split.legacy_id
# Sort fileops according to git rules
for newcommit in newcommits:
newcommit.sort_operations()
# Deduce links between branches on the basis of copies. This
# is tricky because a revision can be the target of multiple
# copies. Humans don't abuse this because tracking multiple
......@@ -4079,6 +4107,7 @@ def last_relevant_commit(max_rev, path,
# No code uses the result if branch analysis is turned off.
if not nobranch:
for newcommit in newcommits:
if not isinstance(newcommit, Commit): continue
if commit.mark in self.branchlink: continue
copies = [node for node in record.nodes \
if node.from_rev is not None \
......@@ -4158,8 +4187,14 @@ def last_relevant_commit(max_rev, path,
complain(b"lookback for %s failed" % latest)
raise Fatal(b"couldn't find a branch root for the copy of %s at r%s." % (latest.path, latest.revision))
# We're done, add all the new commits
oldlen = len(self.repo.events)
self.repo.events += newcommits
newlen = len(self.repo.events)
self.repo.declare_sequence_mutation()
# Sort fileops according to git rules
for newevent in self.repo.events[oldlen:newlen]:
if isinstance(newevent, Commit):
newevent.sort_operations()
# Report progress, and give up our scheduler slot
# so as not to eat the processor.
baton.twirl()
......@@ -5777,10 +5812,16 @@ def squash(self, selected, policy):
# Never delete a blob except as a side effect of
# deleting a commit.
event.deletehook = False
elif isinstance(event, FileOp):
# Likewise, never delete a FileOp except as a side effect of
# deleting a commit.
event.deletehook = False
elif isinstance(event, (Tag, Reset, Passthrough)):
event.deletehook = (b"--delete" in policy)
elif isinstance(event, Commit):
event.deletehook = True
for fileop in event.operations():
fileop.deletehook = True
# Decide the new target for tags
filter_only = True
if tagforward and event.has_children():
......@@ -5970,10 +6011,10 @@ def remark(m, e):
markmap[event.mark] = origin + newcount
newcount += 1
for event in self.events:
for fld in (b"mark", b"committish"):
for fld in (b"mark", b"committish", b"ref"):
try:
old = getattr(event, fld)
if old is not None:
if old is not None and old.startswith(":"):
new = remark(old, event)
if debug_enable(DEBUG_UNITE):
announce(b"renumbering %s -> %s in %s.%s" % (old, new,
......@@ -5982,13 +6023,6 @@ def remark(m, e):
setattr(event, fld, new)
except AttributeError:
pass
for commit in self.commits():
for fileop in commit.operations():
if fileop.op == b"M" and fileop.ref.startswith(b":"):
new = remark(fileop.ref, fileop)
if debug_enable(DEBUG_UNITE):
announce(b"renumbering %s -> %s in fileop" % (fileop.ref, new))
fileop.ref = new
if baton:
baton.bumpcounter()
self.invalidate_object_map()
......@@ -6049,6 +6083,8 @@ def uniquify(self, color, persist=None):
fld))
setattr(event, fld, new)
self.invalidate_object_map()
# Uclear why this is neededm but event.operations() fails otherwise
self.declare_sequence_mutation()
# Now marks in fileops
if isinstance(event, Commit):
for fileop in event.operations():
......@@ -6502,6 +6538,8 @@ def rebuild_repo(repo, target, options, preferred):
src = os.path.join(savedir, sub)
dst = os.path.join(target, sub)
if os.path.exists(src):
if os.path.exists(dst) and os.path.isdir(dst):
shutil.rmtree(dst)
if os.path.isdir(src):
shutil.copytree(src, dst)
else:
......@@ -6656,7 +6694,11 @@ def cut(self, early, late):
# Front events go with early segment, they'll be copied to late one.
for event in self.repo.front_events():
event.color = "early"
assert all(hasattr(x, b"color") or hasattr(x, b"colors") or isinstance(x, Reset) for x in self.repo)
# FileOps go with their commits
for event in self.repo.commits():
for op in event.operations():
op.color = event.color
assert all(hasattr(x, b"color") or hasattr(x, b"colors") or isinstance(x, Reset or isinstance(x, FileOp)) for x in self.repo)
# Resets are tricky. One may have both colors.
# Blobs can have both colors too, through references in
# commits on both sides of the cut, but we took care
......@@ -9382,7 +9424,7 @@ def do_add(self, line):
path = fields[1]
for _, event in self.selected(Commit):
if path in event.paths():
raise Recoverable(b"%s alreadly has an op for %s" \
raise Recoverable(b"%s already has an op for %s" \
% (event.mark, path))
if repo.ancestor_count(event, path) == 0:
raise Recoverable(b"no previous M for %s" % path)
......@@ -9401,7 +9443,7 @@ def do_add(self, line):
except ValueError:
raise Recoverable(b"non-numeric mark %s in add command" % mark)
if not isinstance(repo.objfind(mark), Blob):
raise Recoverable(b"mark %s in add command does not refer to a blob")
raise Recoverable(b"mark %s in add command does not refer to a blob" % mark)
elif markval >= min(self.selection):
raise Recoverable(b"mark %s in add command is after add location" % mark)
path = fields[3]
......
read <testrepo.fi
<2010-11-06T10:49:58Z> list
14 2010-11-06T10:49:58Z :13 Create the third doomed file.
21 2010-11-06T10:49:58Z :13 Create the third doomed file.
<2010-11-06T10:49:58Z> assign fubar
<fubar> list
14 2010-11-06T10:49:58Z :13 Create the third doomed file.
21 2010-11-06T10:49:58Z :13 Create the third doomed file.
<quozzle> resolve Unassigned name
reposurgeon: couldn't match a name at <quozzle>
1 assign fubar
......@@ -13,7 +13,7 @@ Check that sequence mutation does not invalidate assignments
<2010-11-05T22:47:47Z> delete
reposurgeon: warning: commit :4 to be deleted has non-delete fileops.
<fubar> list
13 2010-11-06T10:49:58Z :13 Create the third doomed file.
19 2010-11-06T10:49:58Z :13 Create the third doomed file.
print Check that deleting the assigned commit does
Check that deleting the assigned commit does
<2010-11-06T10:49:58Z> delete
......@@ -25,7 +25,7 @@ print Test unassign
Test unassign
:32 assign glarp
<glarp> list
30 2010-11-08T23:02:38Z :32 Recreating bar.
48 2010-11-08T23:02:38Z :32 Recreating bar.
unassign glarp
<glarp> list
reposurgeon: couldn't match a name at <glarp>
read <deleteall.fi
:13 manifest
Event 16 ================================================================
Event 23 ================================================================
commit refs/heads/samplebranch2
mark :13
README-branch2 -> :9
[/^README/a] resolve
[1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 15, 16]
[1, 2, 4, 5, 7, 9, 11, 12, 14, 15, 17, 21, 23]
[/^README$/a] resolve
[1, 2, 3, 4, 5, 7, 8, 9, 11, 12, 15]
[1, 2, 4, 5, 7, 9, 11, 12, 15, 17, 21]
......@@ -6,30 +6,33 @@ mark :1
committer Eric S. Raymond <esr@thyrsus.com> 1289147634 -0500
data 14
First commit.
Event 2 =================================================================
M 644 inline README
data 37
This is a test file in a dummy repo.
Event 2 =================================================================
Event 3 =================================================================
commit refs/tags/v1
mark :2
committer Eric S. Raymond <esr@thyrsus.com> 1289147718 -0500
data 40
Test of a tag with a file modification.
from :1
Event 4 =================================================================
M 644 inline README
data 42
This is a modification of that test file.
Event 3 =================================================================
Event 5 =================================================================
commit refs/tags/v2
mark :3
committer Eric S. Raymond <esr@thyrsus.com> 1289147740 -0500
data 46
Test of another tag with a file modification.
from :2
Event 6 =================================================================
M 644 inline README
data 48
This is another modification of that test file.
......@@ -47,16 +50,17 @@ mark :1
committer Eric S. Raymond <esr@thyrsus.com> 1289147634 -0500
data 14
First commit.
Event 2 =================================================================
M 644 inline README
data 37
This is a test file in a dummy repo.
Event 2 =================================================================
Event 3 =================================================================
reset refs/tags/v1
from :1
Event 3 =================================================================
Event 4 =================================================================
reset refs/tags/v2
from :1
......@@ -31,7 +31,7 @@ committer Ralf Schlatterbeck <rsc@runtux.com> 0 +0000
data 14
First commit.
M 100644 :1 README
M 100664 :2 .hgignore
M 100644 :2 .hgignore
blob
mark :4
......
......@@ -2,9 +2,9 @@ Initially no sourcetype is set, so =N should be empty
[]
Expect 2 CVS results
2 2012-12-02T05:37:55Z :2 An example dotted numeric 1.1 in a sentence.
4 2012-12-02T05:39:18Z :4 End-of-sentence CVS-style 1.1.
5 2012-12-02T05:39:18Z :4 End-of-sentence CVS-style 1.1.
Expect 4 SVN results
6 2012-12-02T05:39:21Z :6 Subversion-style r123 in midsentence.
8 2012-12-02T05:39:23Z :8 End-of-sentence subversion-style r123.
10 2012-12-02T05:39:25Z :10 Bare 123 in midsentence.
12 2012-12-02T05:39:27Z :12 End-of-sentence bare numeric 123.
8 2012-12-02T05:39:21Z :6 Subversion-style r123 in midsentence.
11 2012-12-02T05:39:23Z :8 End-of-sentence subversion-style r123.
14 2012-12-02T05:39:25Z :10 Bare 123 in midsentence.
17 2012-12-02T05:39:27Z :12 End-of-sentence bare numeric 123.
......@@ -8,7 +8,7 @@ print Test that invoking the macro produces output
Test that invoking the macro produces output
:49 do fubar
list
50 2010-10-26T09:02:25Z :49 Add and document a regression test.
73 2010-10-26T09:02:25Z :49 Add and document a regression test.
print Test that undefining the only macro removes it from the internal list
Test that undefining the only macro removes it from the internal list
undefine fubar
......@@ -18,7 +18,7 @@ Test multiline macroexpansion
define fubaz {
do fubaz :49
inspect :49
Event 50 ================================================================
Event 73 ================================================================
commit refs/tags/lightweight-sample
mark :49
author Eric S. Raymond <esr@thyrsus.com> 1288083745 -0400
......@@ -26,11 +26,6 @@ committer Eric S. Raymond <esr@thyrsus.com> 1288083745 -0400
data 36
Add and document a regression test.
from :44
M 100644 :45 READ[ME].txt
M 100755 :46 rs
M 100644 :47 test/Makefile
M 100644 :48 test/simple.dump
undefine fubaz
print Tests complete
Tests complete
......
read <simple.fi
=H resolve Special set resolution
Special set resolution: [129]
Special set resolution: [202]
15 resolve Event number resolution
Event number resolution: [15]
=TR resolve Special combination
Special combination: [2, 130, 131]
Special combination: [2, 204, 205]
@min(=TR) resolve min operator
min operator: [2]
@max(=TR) resolve max operator
max operator: [131]
max operator: [205]
24..97 resolve Range
Range: [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97]
24..97&=C resolve Range and conjunction
Range and conjunction: [24, 26, 29, 31, 33, 35, 37, 39, 41, 43, 45, 50, 52, 54, 56, 58, 60, 62, 67, 70, 72, 76, 78, 81, 83, 85, 88, 90, 93, 96]
Range and conjunction: [26, 29, 32, 35, 38, 42, 46, 49, 52, 55, 58, 61, 64, 67, 73, 79, 82, 85, 88, 91, 94]
24..97? resolve Neighborhood extension
Neighborhood extension: [22, 24, 26, 29, 31, 33, 35, 37, 39, 41, 43, 45, 50, 52, 54, 56, 58, 60, 62, 67, 70, 72, 76, 78, 81, 83, 85, 88, 90, 93, 96, 99]
Neighborhood extension: [23, 24, 26, 27, 29, 30, 32, 33, 35, 36, 38, 39, 42, 43, 44, 46, 47, 49, 50, 52, 53, 55, 56, 58, 59, 61, 62, 64, 65, 67, 68, 73, 74, 75, 76, 77, 79, 80, 82, 83, 85, 86, 88, 89, 91, 92, 94, 95, 100]
(24..97?) & 20..40 resolve Conjunct
Conjunct: [22, 24, 26, 29, 31, 33, 35, 37, 39]
Conjunct: [23, 24, 26, 27, 29, 30, 32, 33, 35, 36, 38, 39]
(24..97?) & (20..40?) resolve Conjunct with grouping
Conjunct with grouping: [22, 24, 26, 29, 31, 33, 35, 37, 39, 41]
Conjunct with grouping: [23, 24, 26, 27, 29, 30, 32, 33, 35, 36, 38, 39, 42]
24..97 | 20..40 resolve Disjunct
Disjunct: [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97]
(24..97 | 20..40) & =C resolve Commit selection
Commit selection: [20, 22, 24, 26, 29, 31, 33, 35, 37, 39, 41, 43, 45, 50, 52, 54, 56, 58, 60, 62, 67, 70, 72, 76, 78, 81, 83, 85, 88, 90, 93, 96]
Commit selection: [20, 23, 26, 29, 32, 35, 38, 42, 46, 49, 52, 55, 58, 61, 64, 67, 73, 79, 82, 85, 88, 91, 94]
24..97 & =C | 20..40 & =C resolve Disjunct and conjunct
Disjunct and conjunct: [20, 22, 24, 26, 29, 31, 33, 35, 37, 39, 41, 43, 45, 50, 52, 54, 56, 58, 60, 62, 67, 70, 72, 76, 78, 81, 83, 85, 88, 90, 93, 96]
Disjunct and conjunct: [20, 23, 26, 29, 32, 35, 38, 42, 46, 49, 52, 55, 58, 61, 64, 67, 73, 79, 82, 85, 88, 91, 94]
24..97 & (=C | 20..40) resolve Parenthesis grouping
Parenthesis grouping: [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 45, 50, 52, 54, 56, 58, 60, 62, 67, 70, 72, 76, 78, 81, 83, 85, 88, 90, 93, 96]
Parenthesis grouping: [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 46, 49, 52, 55, 58, 61, 64, 67, 73, 79, 82, 85, 88, 91, 94]
3,:15 resolve Comma syntax selecting doubleton
Comma syntax selecting doubleton: [3, 16]
Comma syntax selecting doubleton: [3, 23]
/master/b resolve Branch
Branch: [115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129]
Branch: [181, 182, 184, 185, 187, 188, 190, 191, 193, 194, 196, 197, 198, 201, 202]
/operating theater/B resolve Blobs
Blobs: [15, 17, 19, 21, 49]
Blobs: [22, 25, 28, 31, 72]
<lightweight-sample> resolve Branch tip
Branch tip: [83]
Branch tip: [130]
/annotated-sample/b resolve Tag
Tag: [84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 131]
Tag: [132, 133, 135, 136, 137, 140, 141, 143, 144, 145, 148, 149, 150, 153, 154, 155, 158, 159, 161, 162, 164, 165, 167, 168, 170, 171, 173, 174, 176, 177, 178, 205]
<annotated-sample> resolve Tag location
Tag location: [131]
Tag location: [205]
/regression/ resolve Text search
Text search: [50, 58, 120, 131]
Text search: [73, 88, 188, 205]
/Raymond/ resolve Commit comment search
Commit comment search: [3, 5, 7, 10, 12, 14, 16, 18, 20, 22, 24, 26, 29, 31, 33, 35, 37, 39, 41, 43, 45, 50, 52, 54, 56, 58, 60, 62, 67, 70, 72, 76, 78, 81, 83, 85, 88, 90, 93, 96, 99, 101, 103, 105, 107, 109, 111, 114, 116, 118, 120, 122, 124, 127, 129, 131]
Commit comment search: [3, 6, 9, 13, 17, 20, 23, 26, 29, 32, 35, 38, 42, 46, 49, 52, 55, 58, 61, 64, 67, 73, 79, 82, 85, 88, 91, 94, 100, 107, 112, 117, 122, 126, 130, 133, 137, 141, 145, 150, 155, 159, 162, 165, 168, 171, 174, 178, 182, 185, 188, 191, 194, 198, 202, 205]
[Makefile] resolve Path search
Path search: [64, 67, 68, 70, 71, 72, 73, 76, 77, 78]
Path search: [97, 100, 105, 107, 111, 112, 114, 117, 121, 122]
~[Makefile] resolve Negated path search
Negated path search: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 65, 66, 69, 74, 75, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131]
Negated path search: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 101, 102, 103, 104, 106, 108, 109, 110, 113, 115, 116, 118, 119, 120, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205]
=B & [Makefile] resolve Blob path search
Blob path search: [64, 68, 71, 73, 77]
Blob path search: [97, 105, 111, 114, 121]
=C & [Makefile] resolve Commit path search
Commit path search: [67, 70, 72, 76, 78]
Commit path search: [100, 107, 112, 117, 122]
[/Ma.*le/] resolve Regexp commit search
Regexp commit search: [48, 50, 57, 58, 64, 67, 68, 69, 70, 71, 72, 73, 76, 77, 78]
Regexp commit search: [71, 73, 87, 88, 97, 100, 105, 106, 107, 111, 112, 114, 117, 121, 122]
=B & [/Ma.*le/] resolve Regexp patch search for blobs
Regexp patch search for blobs: [48, 57, 64, 68, 69, 71, 73, 77]
Regexp patch search for blobs: [71, 87, 97, 105, 106, 111, 114, 121]
=C & [/Ma.*le/] resolve Regexp patch search for commits
Regexp patch search for commits: [50, 58, 67, 70, 72, 76, 78]
Regexp patch search for commits: [73, 88, 100, 107, 112, 117, 122]
[/^Ma.*le$/] resolve Anchored regexp commit search
Anchored regexp commit search: [64, 67, 68, 70, 71, 72, 73, 76, 77, 78]
Anchored regexp commit search: [97, 100, 105, 107, 111, 112, 114, 117, 121, 122]
=B & [/^Ma.*le$/] resolve Anchored regexp patch search for blobs
Anchored regexp patch search for blobs: [64, 68, 71, 73, 77]
Anchored regexp patch search for blobs: [97, 105, 111, 114, 121]
=C & [/^Ma.*le$/] resolve Anchored regexp patch search for commits
Anchored regexp patch search for commits: [67, 70, 72, 76, 78]
Anchored regexp patch search for commits: [100, 107, 112, 117, 122]
[/D.ME.\.txt/] resolve Regexp escape
Regexp escape: [46, 50]
Regexp escape: [69, 73]
[/Makefile/a] resolve Author match
Author match: [48, 57, 58, 64, 68, 69, 71, 72, 73, 77, 78]
Author match: [71, 87, 88, 97, 105, 106, 111, 112, 114, 121, 122]
[/^Make/a] resolve Anchored author match
Anchored author match: [64, 68, 71, 72, 73, 77, 78]
Anchored author match: [97, 105, 111, 112, 114, 121, 122]
[/^test/] resolve Text search
Text search: [48, 49, 50, 57, 58, 69, 70]
Text search: [71, 72, 73, 87, 88, 106, 107]
[/^test/c] resolve Comment search
Comment search: [50, 52, 54, 56, 58, 60, 62, 67, 70, 72, 76, 78, 81, 83, 85, 88, 90, 93, 96, 99, 101, 103, 105, 107, 109, 111, 114, 116, 118, 120, 122, 124, 127, 129]
Comment search: [73, 79, 82, 85, 88, 91, 94, 100, 107, 112, 117, 122, 126, 130, 133, 137, 141, 145, 150, 155, 159, 162, 165, 168, 171, 174, 178, 182, 185, 188, 191, 194, 198, 202]
[/^r/ca] resolve Commit and author search
Commit and author search: [3, 5]
Commit and author search: [3, 6]
[/r/ca] resolve Commit and author search
Commit and author search: [3, 5, 7, 10, 12, 14, 16, 18, 20, 22, 24, 26, 29, 31, 33, 35, 37, 39, 41, 43, 45]
Commit and author search: [3, 6, 9, 13, 17, 20, 23, 26, 29, 32, 35, 38, 42, 46, 49, 52, 55, 58, 61, 64, 67]
<2010-10-27T18:43:32Z> resolve Date resolution
Date resolution: [127]
Date resolution: [198]
<2010-10-27T12:07:32Z!esr@thyrsus.com> resolve Action stamp resolution
Action stamp resolution: [105]
Action stamp resolution: [165]
<2010-10-27> resolve Partial-date resolution
Partial-date resolution: [99, 101, 103, 105, 107, 109, 111, 114, 116, 118, 120, 122, 124, 127, 129, 131]
Partial-date resolution: [155, 159, 162, 165, 168, 171, 174, 178, 182, 185, 188, 191, 194, 198, 202, 205]
@amp(1) resolve resolve amplified nonempty set
resolve amplified nonempty set: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131]
resolve amplified nonempty set: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205]
@amp(/mytzlpyk/) resolve amplified empty set
amplified empty set: []
@suc(<2010-10-27T17:25:36Z>) resolve successor function call
successor function call: [117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131]
successor function call: [183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205]
@pre(<2010-10-27T17:25:36Z>) resolve predecessor function call
predecessor function call: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115]
predecessor function call: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181]
# Test here-doc syntax
echo 0
write -