summaryrefslogtreecommitdiff
path: root/scripts/feeds
diff options
context:
space:
mode:
authorluka <luka@3c298f89-4303-0410-b956-a3cf2f4a3e73>2013-09-25 13:02:55 +0000
committerluka <luka@3c298f89-4303-0410-b956-a3cf2f4a3e73>2013-09-25 13:02:55 +0000
commitf620f59c7abaa5f015a187ff7e6b275c0bdc3252 (patch)
treedc6157c4f8e65c0e405fa9f08574735ffd391b14 /scripts/feeds
parent73636ef1d04395b090d0438497b1de32e6333ae5 (diff)
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
Diffstat (limited to 'scripts/feeds')
-rwxr-xr-xscripts/feeds10
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;
}