diff options
author | Luka Perkov <luka@openwrt.org> | 2013-09-25 13:02:55 +0000 |
---|---|---|
committer | Luka Perkov <luka@openwrt.org> | 2013-09-25 13:02:55 +0000 |
commit | 6eb901700cc9f94a8dfa6001d6a913f97d71d542 (patch) | |
tree | dc6157c4f8e65c0e405fa9f08574735ffd391b14 | |
parent | 3a931a5b0ceb95b93b7bfdb085b27ebef0c8600a (diff) | |
download | upstream-6eb901700cc9f94a8dfa6001d6a913f97d71d542.tar.gz upstream-6eb901700cc9f94a8dfa6001d6a913f97d71d542.tar.bz2 upstream-6eb901700cc9f94a8dfa6001d6a913f97d71d542.zip |
feeds: enable cloning of specific git commit
Following syntax should be used to enable this feature:
src-git custom git://openwrt/custom-feed^SHA_COMMIT_ID
Signed-off-by: Luka Perkov <luka@openwrt.org>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@38172 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rwxr-xr-x | scripts/feeds | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/scripts/feeds b/scripts/feeds index 680500d418..85aeab5520 100755 --- a/scripts/feeds +++ b/scripts/feeds @@ -119,6 +119,7 @@ my %update_method = ( 'src-git' => { 'init' => "git clone --depth 1 '%s' '%s'", 'init_branch' => "git clone --depth 1 --branch '%s' '%s' '%s'", + 'init_commit' => "git clone '%s' '%s' && cd '%s' && git checkout -b '%s' '%s' && cd -", 'update' => "git pull --ff", 'controldir' => ".git", 'revision' => "git show --abbrev-commit HEAD | head -n 1 | cut -d ' ' -f 2 | tr -d '\n'"}, @@ -154,15 +155,20 @@ sub update_feed_via($$$$) { my $localpath = "./feeds/$name"; my $safepath = $localpath; $safepath =~ s/'/'\\''/; - my ($base, $branch) = split(/;/, $src, 2); + my ($base_branch, $branch) = split(/;/, $src, 2); + my ($base_commit, $commit) = split(/\^/, $src, 2); if( $relocate || !$m->{'update'} || !-d "$localpath/$m->{'controldir'}" ) { system("rm -rf '$safepath'"); if ($m->{'init_branch'} and $branch) { - system(sprintf($m->{'init_branch'}, $branch, $base, $safepath)) == 0 or return 1; + system(sprintf($m->{'init_branch'}, $branch, $base_branch, $safepath)) == 0 or return 1; + } elsif ($m->{'init_commit'} and $commit) { + system(sprintf($m->{'init_commit'}, $base_commit, $safepath, $safepath, $commit, $commit)) == 0 or return 1; } else { system(sprintf($m->{'init'}, $src, $safepath)) == 0 or return 1; } + } elsif ($m->{'init_commit'} and $commit) { + # in case git hash has been provided don't update the feed } else { system("cd '$safepath'; $m->{'update'}") == 0 or return 1; } |