git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/2] git-svn: only look at the root path for svn:mergeinfo

From
Jakob Stoklund Olesen <stoklund@2pi.dk>
Date
Apr 27, 2014, 19:00 UTC
Message-ID
<7C3E8DB5-4E0D-48B4-B5B6-3EE268AE639F@2pi.dk>
In-Reply-To
<20140422185459.GA17248@dcvr.yhbt.net>
On Apr 22, 2014, at 11:54 AM, Eric Wong <normalperson@yhbt.net> wrote:
Show 6 quoted lines
> Jakob Stoklund Olesen <stoklund@2pi.dk> wrote:
>> Subversion can put mergeinfo on any sub-directory to track cherry-picks.
>> Since cherry-picks are not represented explicitly in git, git-svn should
>> just ignore it.
> 
> Hi, was git-svn trying to track cherry-picks as merge before?
It would try and fail. I didn't explain that properly in the commit message.
Suppose I have a standard svn layout with $url/trunk and $url/branches/topic1. My topic1 branch has a change in subdir1 that I want to cherry-pick into trunk:

% svn switch $url/trunk % cd subdir1 % svn merge $url/branches/topic1/subdir1 % cd .. % svn commit

This operation will set svn:mergeinfo on $url/trunk/subdir1 where a normal full merge would set it on $url/trunk:

% svn pg svn:mergeinfo subdir1 /branches/topic1/subdir1:3-4

When git-svn fetches these changes, it currently does examine the svn:mergeinfo change on the subdirectory as if it were a full merge. It then fails to find a revmap for /branches/topic1/subdir1:

Couldn't find revmap for file:///tmp/sdb/branches/topic1/subdir1 r5 = 5ce1f687c30495deca40730fb7be3baa0e145479 (refs/remotes/trunk)

It is looking for refs/remotes/topic1/subdir1, but we only have the refs/remotes/topic1 branch in git.
This patch makes git-svn stop trying to reconstruct those subdirectory merges that we know will fail anyway.
> This changes behavior a bit, so two independent users of git-svn
> may not have identical histories as a result, correct?
For normal subdirectory cherry-picks as described above, the behavior doesn't change. This is just a performance optimization.
For weirder cases where a whole branch has been merged onto a subdirectory of trunk, behavior does change. Currently, git-svn will mark that as a full merge in git. With this change it won't.
> Can you add a test to ensure this behavior is preserved?
> Thanks.
I'll add a test for the subdirectory merge described above.
Show 7 quoted lines
> Sorry, I've never looked at mergeinfo myself, mainly relying on
> Sam + tests for this.
> 
> [1] - Historically, git-svn (using defaults) has always tried to
>      preserve identical histories for independent users across
>      different git-svn versions.  However, mergeinfo may be
>      enough of a corner-case where we can make an exception.
I agree. It doesn't seem worthwhile to try to preserve git-svn's historical behavior in weird corner cases.
BTW, this performance optimization matters not because of sporadic manual cherry-picks, but because certain older svn releases would replicate svn:mergeinfo on every subdirectory in a standard merge. With hundreds of subdirectories and thousands of merged branches, git-svn gets completely stuck processing all those mergeinfo lines.

Thanks, /jakob

Previous: Eric WongNext: Eric Wong
Message 4 of 5 in “git-svn: only look at the new parts of svn:mergeinfo”
  1. 1/2 git-svn: only look at the new parts of svn:mergeinfoJakob Stoklund Olesen, Apr 17, 2014
  2. 2/2 git-svn: only look at the root path for svn:mergeinfoJakob Stoklund Olesen, Apr 17, 2014
  3. Eric WongApr 22, 2014
  4. Jakob Stoklund OlesenApr 27, 2014
  5. Eric WongApr 22, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.