Ticket #8369: sync-all-submodules-locally.diff

File sync-all-submodules-locally.diff, 2.6 KB (added by nwf, 5 years ago)
  • sync-all

    diff --git a/sync-all b/sync-all
    index 55b737c..7ed78c5 100755
    a b sub getrepo { 
    176176
    177177    my $repo_base;
    178178    my $checked_out_tree;
     179    my $repo_local = 0;
    179180
    180181    if ($repo =~ /^...*:/) {
    181182        # HTTP or SSH
    sub getrepo { 
    206207    }
    207208    elsif ($repo =~ /^\/|\.\.\/|.:(\/|\\)/) {
    208209        # Local filesystem, either absolute (C:/ or /) or relative (../) path
     210        $repo_local = 1;
    209211        $repo_base = $repo;
    210212        if (-f "$repo/HEAD") {
    211213            # assume a local mirror:
    sub getrepo { 
    223225        die "Couldn't work out repo";
    224226    }
    225227
    226     return $repo_base, $checked_out_tree;
     228    return $repo_base, $checked_out_tree, $repo_local;
    227229}
    228230
    229231sub gitall {
    sub gitall { 
    244246    my $doing;
    245247    my $start_repo;
    246248
    247     my ($repo_base, $checked_out_tree) = getrepo();
     249    my ($repo_base, $checked_out_tree, $repo_local) = getrepo();
    248250
    249251    my $is_github_repo = $repo_base =~ m/(git@|git:\/\/|https:\/\/)github.com/;
    250252
    sub gitall { 
    561566    unlink "resume";
    562567}
    563568
     569sub gitInitSubmodules {
     570    &git(".", "submodule", "init", @_);
     571
     572    my ($repo_base, $checked_out_tree, $repo_local) = getrepo();
     573    # if we came from a local repository, grab our submodules from their
     574    # checkouts over there, if they exist.
     575    if ($repo_local) {
     576        my $gitConfig = &tryReadFile(".git/config");
     577        foreach $_ (split /^/, $gitConfig) {
     578            if ($_ =~ /^\[submodule "(.*)"\]$/ and -e "$repo_base/$1/.git") {
     579                &git(".", "config", "submodule.$1.url", "$repo_base/$1");
     580            }
     581        }
     582    }
     583}
     584
    564585sub checkCurrentBranchIsMaster {
    565586    my $branch = `git symbolic-ref HEAD`;
    566587    $branch =~ s/refs\/heads\///;
    sub main { 
    892913        my @submodule_args = grep(/^-q/,@_);
    893914
    894915        if ($command eq "get") {
    895             &git(".", "submodule", "init", @submodule_args);
     916            &gitInitSubmodules(@submodule_args);
    896917        }
     918
    897919        if ($command eq "pull") {
    898920            my $gitConfig = &tryReadFile(".git/config");
    899921            if ($gitConfig !~ /submodule/) {
    900                 &git(".", "submodule", "init", @submodule_args);
     922                &gitInitSubmodules(@submodule_args);
    901923            }
    902924        }
    903925        if ($command eq "get" or $command eq "pull") {
    904926            my $gitConfig = &tryReadFile(".git/config");
    905927            if ($gitConfig !~ /submodule/) {
    906                 &git(".", "submodule", "init", @submodule_args);
     928                &gitInitSubmodules(@submodule_args);
    907929            }
    908930            &git(".", "submodule", "update", @submodule_args);
    909931        }