[Nut-upsdev] reposurgeon progress

Eric S. Raymond esr at thyrsus.com
Mon Jan 9 05:58:33 UTC 2012

This is a consolidated reply to your four most recent emails.

> I am trying to leverage reposurgeon to automate the process of finding merge
> points, and I seem to be spinning my wheels. Can you provide an example of how
> you are searching for merges?

Not a working one, yet.  That code is buggy.  It's my next thing to work on.

>reposurgeon% merge (apcsmart-dev)
>reposurgeon: :11392 cannot merge clean at target :11808
>reposurgeon: target :11808 is out of date on these files: docs/man/apcsmart.txt drivers/apcsmart.h drivers/apcsmart.c
># This doesn't seem to be the right merge point, but maybe that's because '(apcsmart-dev)' represents the whole branch.

That's correct. <apcsmart-dev> is the syntax to reference the tip commit.

> I am not sure why this merge is so far down the trunk - it was definitely 
> merged before v2.6.2.

As I said, the merge code is buggy.  It's one of the two algorithmic issues
I still need to work on.  After I fix the things that are plain bugs.

># 2. set-eol-style operations get lost; see tags windows-set-eol, reset-eol.
>Again, I think we're okay with that. But I don't have a Windows setup to test with.

I now have that under "# Known problems that are not resolvable." You may
have to do something about it after conversion, but it's effectively off
my list.

>> # 3. Should the first Eaton_SDK commit after the deleteall have a link
>> #    back to trunk?
>Yes, and not to the deleteall (which should be tagified).

OK, noted.  I was assuming that the deleteall should be tagified or removed.
In fact that's already an operation in the lift recipe.

This is the other algorithmic issue.  The problem I have to deal with
is not just patching this one link back to trunk, it's that I don't
yet understand under which circumstances my translator should generate
merge commits on its own.

>> Also, some remaining zero-fileop commits on the root branch should
>> probably be tagified.
>I haven't had a chance to look at the last two.

I have. It's nothing - they're from branch deletions, or from branch
renames that never need to get expressed in gitspace because there are
no file operations after the renames.

>I'd add this to the list: "5. with multiple fossil references in a line, only
>the first gets lifted."

I've already dealt with the problem this would solve by inserting line feeds
where the action stamps need horizontal room.

>I think it might be time to revisit the alternate style I proposed a
>while back (which can probably be handled through editing *.box) where
>we use a footnote-like syntax. If this were automated (and I wouldn't
>mind taking a shot at it) we could also add short Git hashes to help
>with quickly navigating through the tree in gitk (since they turn into
>clickable links).

This is a cosmetic issue.  Hold that thought, and let's revisit once I
have the implementation bugs fixed and the algorithmic stuff solved.

>Long-term it might be nice to patch gitk to understand your commit ID format.

I'd do that if I undertood the gitk code well enough.  But it's pretty hairy,
and my Tcl-fu is weak. How's yours?

> Also attached is a patch to fix the help for several commands (they did not
> print anything in the interactive mode).

Applied, thanks.

>> # 4. Is the new_UIs-root tag still useful?  It doesn't seem to point
>> #    at an actual branch.
>ESR: In terms of content, no - not useful.

OK, crossed off my list.

>I think we have another case of some deleteall commits masking some other
>problem. From the reposurgeon Git repository, the commit "Moving
>branches/Development into trunk." (2006-02-16T13:31:43Z!clepple+nut at gmail.com)
>is a deleteall, but in our existing git-svn conversion and original SVN
>repository, that commit is a no-op (file-wise) that connects/renames the old
>branches/Development with the new trunk:

Yes, this is probably related to the fact that I'm not generating both 
parent links on the Eaton_SDK branch where I should.

>I'll look to see how we merged branches/Testing and trunk.

Please do.  Giving me a good grasp on how the topology of the git
commit graph is wrong in those cases will be essential to getting it

>I just discovered that the svn:ignore properties are not converting to
>.gitignore files properly. It looks like the regression happened between
>2.0-pre4 and -pre5, although it could well be that the configuration files
>bundled with those versions are deleting the necessary metadata.
>In the git output of 2.0-pre5 and later, all of the .gitignore files
>contain the following:
>even the ones in subdirectories where config.log would not be expected.

Hmmm.  I instrumented reposurgeon to show all instances of .gitignore
generation, and I'm not spotting any that are obviously wrong to me.

2.0-pre7 and auxiliary files have been uploaded to


so you can duplicate this test; just set "verbose 2".

Summary of current known issues:

# 1. Merge code isn't working.
# 2. The first Eaton_SDK commit after the deleteall should have a link
#    back to trunk. The commit "Moving branches/Development into trunk." 
#    (2006-02-16T13:31:43Z!clepple+nut at gmail.com) is a deleteall in 
#    reposurgeon's translation, but in the git-svn conversion and original SVN
#    repository that commit is a no-op (file-wise) that connects/renames the
#    old branches/Development with the new trunk. Both instances of a general
#    problem: I don't have rules for when I should be generating merge 
#    commits.
# 3. Charles thinks .gitignore generation is busted since pre5, but I
#    don't see how. 

I'm going to work on 1 and 2.  If you can give me a precise report of
deviation from expected behavior 3 shouldn't be hard to fix.
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

More information about the Nut-upsdev mailing list