Previously, Git feeds could be pinned to a particular commit using
URL^commit notation. This patch provides the same functionality for
SVN-based feeds, using URL@revision notation. Just like pinned Git
feeds, pinned SVN feeds do not update when ./scripts/feeds update is
run.

Signed-off-by: Nate Hardison <[email protected]>
---
 scripts/feeds | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/scripts/feeds b/scripts/feeds
index 26c2de0..1589bff 100755
--- a/scripts/feeds
+++ b/scripts/feeds
@@ -105,7 +105,8 @@ sub update_index($)
 
 my %update_method = (
        'src-svn' => {
-               'init'          => "svn checkout '%s' '%s'",
+               'init'          => "svn checkout '%s' '%s'",
+               'init_revision' => "svn checkout -r '%s' '%s' '%s'",
                'update'        => "svn update",
                'controldir'    => ".svn",
                'revision'      => "svn info | grep 'Revision' | cut -d ' ' -f 
2 | tr -d '\n'"},
@@ -126,6 +127,7 @@ my %update_method = (
                'revision'      => "git show --abbrev-commit HEAD | head -n 1 | 
cut -d ' ' -f 2 | tr -d '\n'"},
        'src-gitsvn' => {
                'init'  => "git svn clone -r HEAD '%s' '%s'",
+               'init_revision' => "git svn clone -r '%s' '%s' '%s'",
                'update'        => "git svn rebase",
                'controldir'    => ".git",
                'revision'      => "git show --abbrev-commit HEAD | head -n 1 | 
cut -d ' ' -f 2 | tr -d '\n'"},
@@ -158,6 +160,7 @@ sub update_feed_via($$$$) {
        $safepath =~ s/'/'\\''/;
        my ($base_branch, $branch) = split(/;/, $src, 2);
        my ($base_commit, $commit) = split(/\^/, $src, 2);
+       my ($base_revision, $revision) = split(/@/, $src, 2);
 
        if( $relocate || !$m->{'update'} || !-d "$localpath/$m->{'controldir'}" 
) {
                system("rm -rf '$safepath'");
@@ -165,11 +168,15 @@ sub update_feed_via($$$$) {
                        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;
+               } elsif ($m->{'init_revision'} and $revision) {
+                       system(sprintf($m->{'init_revision'}, $revision, 
$base_revision, $safepath)) == 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
+       } elsif ($m->{'init_revision'} and $revision) {
+               # in case svn revision has been provided don't update the feed
        } else {
                system("cd '$safepath'; $m->{'update'}") == 0 or return 1;
        }
-- 
1.9.1
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to