Pull out remote listing functions in git-remote.
authorShawn O. Pearce <spearce@spearce.org>
Fri, 2 Feb 2007 05:05:55 +0000 (00:05 -0500)
committerJunio C Hamano <junkio@cox.net>
Fri, 2 Feb 2007 06:03:42 +0000 (22:03 -0800)
I want to reuse the stale branch detection to implement a new
'git remote prune' subcommand.  Easiest way to do that is to use
the same logic that 'git remote show' uses to determine the stale
tracking branches, then delete those.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
git-remote.perl

index c813fe14518fc12cb8260d053d0b87d834eed47d..969d33bc5e7ab321d4462dbb246e471e22b451d1 100755 (executable)
@@ -130,7 +130,7 @@ sub update_ls_remote {
        $info->{'LS_REMOTE'} = \@ref;
 }
 
-sub show_wildcard_mapping {
+sub list_wildcard_mapping {
        my ($forced, $ours, $ls) = @_;
        my %refs;
        for (@$ls) {
@@ -156,25 +156,14 @@ sub show_wildcard_mapping {
                        push @tracked, $_;
                }
        }
-       if (@new) {
-               print "  New remote branches (next fetch will store in remotes/$ours)\n";
-               print "    @new\n";
-       }
-       if (@stale) {
-               print "  Stale tracking branches in remotes/$ours (you'd better remove them)\n";
-               print "    @stale\n";
-       }
-       if (@tracked) {
-               print "  Tracked remote branches\n";
-               print "    @tracked\n";
-       }
+       return \@new, \@stale, \@tracked;
 }
 
-sub show_mapping {
+sub list_mapping {
        my ($name, $info) = @_;
        my $fetch = $info->{'FETCH'};
        my $ls = $info->{'LS_REMOTE'};
-       my (@stale, @tracked);
+       my (@new, @stale, @tracked);
 
        for (@$fetch) {
                next unless (/(\+)?([^:]+):(.*)/);
@@ -182,7 +171,11 @@ sub show_mapping {
                if ($theirs eq 'refs/heads/*' &&
                    $ours =~ /^refs\/remotes\/(.*)\/\*$/) {
                        # wildcard mapping
-                       show_wildcard_mapping($forced, $1, $ls);
+                       my ($w_new, $w_stale, $w_tracked)
+                               = list_wildcard_mapping($forced, $1, $ls);
+                       push @new, @$w_new;
+                       push @stale, @$w_stale;
+                       push @tracked, @$w_tracked;
                }
                elsif ($theirs =~ /\*/ || $ours =~ /\*/) {
                        print STDERR "Warning: unrecognized mapping in remotes.$name.fetch: $_\n";
@@ -196,13 +189,23 @@ sub show_mapping {
                        }
                }
        }
-       if (@stale) {
+       return \@new, \@stale, \@tracked;
+}
+
+sub show_mapping {
+       my ($name, $info) = @_;
+       my ($new, $stale, $tracked) = list_mapping($name, $info);
+       if (@$new) {
+               print "  New remote branches (next fetch will store in remotes/$name)\n";
+               print "    @$new\n";
+       }
+       if (@$stale) {
                print "  Stale tracking branches in remotes/$name (you'd better remove them)\n";
-               print "    @stale\n";
+               print "    @$stale\n";
        }
-       if (@tracked) {
+       if (@$tracked) {
                print "  Tracked remote branches\n";
-               print "    @tracked\n";
+               print "    @$tracked\n";
        }
 }