diff --git a/git-hooks/gerrit-bot b/git-hooks/gerrit-bot index 8bb327c71aebf2390c12e51953a850f98d70d3fe..26ac7411e3ca510b0ec0a16342bd00c261585dd2 100755 --- a/git-hooks/gerrit-bot +++ b/git-hooks/gerrit-bot @@ -82,9 +82,9 @@ sub printerr($) print STDERR $msg.".\n"; } -sub process_commit($$$) +sub process_commit($$$$) { - my ($project, $ref, $rev) = @_; + my ($number, $project, $ref, $rev) = @_; if (defined $processed{$ref}) { return; @@ -117,9 +117,7 @@ sub process_commit($$$) chomp(@mainlines = `git config remote.origin.fetch`); $skipfetch{$project} = 1; } - my $dref = $ref; - $dref =~ s,/[^/]+$,,; - if (system("git", "fetch", "-f", "origin", $ref.":".$dref, @mainlines)) { + if (system("git", "fetch", "-f", "origin", $ref.":refs/changes/".$number, @mainlines)) { printerr "GIT fetch of ".$ref." from ".$project." failed"; return; } @@ -167,6 +165,7 @@ open STATUS, "-|", @gerrit, "query", "--format", "JSON", "--current-patch-set", REVIEW: while (<STATUS>) { my $review = decode_json($_); defined($review) or die "cannot decode JSON string '".chomp($_)."'\n"; + my $number = $$review{'number'}; my $project = $$review{'project'}; my $cps = $$review{'currentPatchSet'}; if (defined $cps) { @@ -186,7 +185,7 @@ REVIEW: while (<STATUS>) { } } } - process_commit($project, $ref, $revision); + process_commit($number, $project, $ref, $revision); } } close STATUS; @@ -199,7 +198,7 @@ while (<UPDATES>) { if ($type eq 'patchset-created') { my $chg = $$update{'change'}; my $ps = $$update{'patchSet'}; - process_commit($$chg{'project'}, $$ps{'ref'}, $$ps{'revision'}); + process_commit($$chg{'number'}, $$chg{'project'}, $$ps{'ref'}, $$ps{'revision'}); } elsif ($type eq 'ref-updated') { my $rup = $$update{'refUpdate'}; delete $skipfetch{$$rup{'project'}};