From: Marco Costalba Date: Sun, 20 May 2007 14:23:29 GMT Subject: Re: [QGit PATCH] Remove most ASSERT warnings in Git::setStatus Message-ID: In-Reply-To: <200705201558.53546.barra_cuda@katamail.com> On 5/20/07, Michael wrote: > "Marco Costalba" : > > On 5/20/07, Michael wrote: > > > Signed-off-by: Michele Ballabio > > > --- > > > > > > ...is this correct? > > > > > > src/git_startup.cpp | 2 +- > > > 1 files changed, 1 insertions(+), 1 deletions(-) > > > > > > diff --git a/src/git_startup.cpp b/src/git_startup.cpp > > > index a99edba..17312f9 100644 > > > --- a/src/git_startup.cpp > > > +++ b/src/git_startup.cpp > > > @@ -329,7 +329,7 @@ void Git::parseDiffFormatLine(RevFile& rf, SCRef line, int parNum) { > > > > > > // TODO rename/copy is not supported for combined merges > > > appendFileName(rf, line.section('\t', -1)); > > > - setStatus(rf, line.section(' ', 6, 6).left(1)); > > > + setStatus(rf, line.section('\t', -2, -2).right(1)); > > > rf.mergeParent.append(parNum); > > > } else { // faster parsing in normal case > > > >From diff-format.txt we have that an output line is formatted this way: ------------------------------------------------ in-place edit :100644 100644 bcd1234... 0123456... M file0 copy-edit :100644 100644 abcd123... 1234567... C68 file1 file2 rename-edit :100644 100644 abcd123... 1234567... R86 file1 file3 create :000000 100644 0000000... 1234567... A file4 delete :100644 000000 1234567... 0000000... D file5 unmerged :000000 000000 0000000... 0000000... U file6 ------------------------------------------------ That is, from the left to the right: . a colon. . mode for "src"; 000000 if creation or unmerged. . a space. . mode for "dst"; 000000 if deletion or unmerged. . a space. . sha1 for "src"; 0\{40\} if creation or unmerged. . a space. . sha1 for "dst"; 0\{40\} if creation, unmerged or "look at work tree". . a space. . status, followed by optional "score" number. . a tab or a NUL when '-z' option is used. . path for "src" . a tab or a NUL when '-z' option is used; only exists for C or R. . path for "dst"; only exists for C or R. . an LF or a NUL when '-z' option is used, to terminate the record. So I rather would prefer something like line.section('\t', 0, 0).section(' ', -1, -1).left(1) because we could have more then one file separated by a tab, so line.section('\t', -2, -2).right(1) it seems to me a little bit fragile. What do you think? Also I don't understand why you consider the right most (right(1)), instead of the left most character as the status. Thanks Marco