git-svn: don't create master if another head exists

git-svn insists on creating the "master" head (unless it exists) on every
"fetch". It is useful that it gets created initially, when no head exists
- users expect this git convention of having a "master" branch on initial
clone.

However creating it when there already is another head does not provide any
value - the ref is never updated, so it just gets stale after a while.  Also,
some users find it annoying that it gets recreated, especially when they would
like the git branch names to follow SVN repository branch names. More
background in http://thread.gmane.org/gmane.comp.version-control.git/115030

Make git-svn skip the "master" creation if HEAD already points at a valid head.
This means "master" does get created on initial "clone" but does not get
recreated once a user deletes it.

Also, make post_fetch_checkout work with any head that is pointed to by HEAD,
not just "master".

Also, use fatal error handling consistent with the rest of the program for
post_fetch_checkout.

Signed-off-by: Marcin Owsiany <marcin@owsiany.pl>
Signed-off-by: Eric Wong <normalperson@yhbt.net>
This commit is contained in:
Marcin Owsiany 2012-06-24 22:40:05 +01:00 коммит произвёл Eric Wong
Родитель 31c79549b8
Коммит e3bd4ddaa9
1 изменённых файлов: 4 добавлений и 5 удалений

Просмотреть файл

@ -367,9 +367,9 @@ Git::SVN::init_vars();
eval { eval {
Git::SVN::verify_remotes_sanity(); Git::SVN::verify_remotes_sanity();
$cmd{$cmd}->[0]->(@ARGV); $cmd{$cmd}->[0]->(@ARGV);
post_fetch_checkout();
}; };
fatal $@ if $@; fatal $@ if $@;
post_fetch_checkout();
exit 0; exit 0;
####################### primary functions ###################### ####################### primary functions ######################
@ -1598,8 +1598,8 @@ sub rebase_cmd {
sub post_fetch_checkout { sub post_fetch_checkout {
return if $_no_checkout; return if $_no_checkout;
return if verify_ref('HEAD^0');
my $gs = $Git::SVN::_head or return; my $gs = $Git::SVN::_head or return;
return if verify_ref('refs/heads/master^0');
# look for "trunk" ref if it exists # look for "trunk" ref if it exists
my $remote = Git::SVN::read_all_remotes()->{$gs->{repo_id}}; my $remote = Git::SVN::read_all_remotes()->{$gs->{repo_id}};
@ -1612,9 +1612,8 @@ sub post_fetch_checkout {
} }
} }
my $valid_head = verify_ref('HEAD^0'); command_noisy(qw(update-ref HEAD), $gs->refname);
command_noisy(qw(update-ref refs/heads/master), $gs->refname); return unless verify_ref('HEAD^0');
return if ($valid_head || !verify_ref('HEAD^0'));
return if $ENV{GIT_DIR} !~ m#^(?:.*/)?\.git$#; return if $ENV{GIT_DIR} !~ m#^(?:.*/)?\.git$#;
my $index = $ENV{GIT_INDEX_FILE} || "$ENV{GIT_DIR}/index"; my $index = $ENV{GIT_INDEX_FILE} || "$ENV{GIT_DIR}/index";