gitweb: check given hash before trying to create snapshot
Makes things nicer in cases when you hand craft the snapshot URL but make a typo in defining the hash variable (e.g. netx instead of next); you will now get an error message instead of a broken tarball. Tests for t9501 are included to demonstrate added functionality. Signed-off-by: Mark Rada <marada@uwaterloo.ca> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
parent
1be224ba6e
commit
fdb0c36e90
@ -5196,8 +5196,11 @@ sub git_snapshot {
|
|||||||
die_error(403, "Unsupported snapshot format");
|
die_error(403, "Unsupported snapshot format");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!defined $hash) {
|
my $type = git_get_type("$hash^{}");
|
||||||
$hash = git_get_head_hash($project);
|
if (!$type) {
|
||||||
|
die_error(404, 'Object does not exist');
|
||||||
|
} elsif ($type eq 'blob') {
|
||||||
|
die_error(400, 'Object is not a tree-ish');
|
||||||
}
|
}
|
||||||
|
|
||||||
my $name = $project;
|
my $name = $project;
|
||||||
|
@ -75,4 +75,43 @@ test_expect_success \
|
|||||||
test_debug 'cat gitweb.output'
|
test_debug 'cat gitweb.output'
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# snapshot hash ids
|
||||||
|
|
||||||
|
test_expect_success 'snapshots: good tree-ish id' '
|
||||||
|
gitweb_run "p=.git;a=snapshot;h=master;sf=tgz" &&
|
||||||
|
grep "Status: 200 OK" gitweb.output
|
||||||
|
'
|
||||||
|
test_debug 'cat gitweb.output'
|
||||||
|
|
||||||
|
test_expect_success 'snapshots: bad tree-ish id' '
|
||||||
|
gitweb_run "p=.git;a=snapshot;h=frizzumFrazzum;sf=tgz" &&
|
||||||
|
grep "404 - Object does not exist" gitweb.output
|
||||||
|
'
|
||||||
|
test_debug 'cat gitweb.output'
|
||||||
|
|
||||||
|
test_expect_success 'snapshots: bad tree-ish id (tagged object)' '
|
||||||
|
echo object > tag-object &&
|
||||||
|
git add tag-object &&
|
||||||
|
git commit -m "Object to be tagged" &&
|
||||||
|
git tag tagged-object `git hash-object tag-object` &&
|
||||||
|
gitweb_run "p=.git;a=snapshot;h=tagged-object;sf=tgz" &&
|
||||||
|
grep "400 - Object is not a tree-ish" gitweb.output
|
||||||
|
'
|
||||||
|
test_debug 'cat gitweb.output'
|
||||||
|
|
||||||
|
test_expect_success 'snapshots: good object id' '
|
||||||
|
ID=`git rev-parse --verify HEAD` &&
|
||||||
|
gitweb_run "p=.git;a=snapshot;h=$ID;sf=tgz" &&
|
||||||
|
grep "Status: 200 OK" gitweb.output
|
||||||
|
'
|
||||||
|
test_debug 'cat gitweb.output'
|
||||||
|
|
||||||
|
test_expect_success 'snapshots: bad object id' '
|
||||||
|
gitweb_run "p=.git;a=snapshot;h=abcdef01234;sf=tgz" &&
|
||||||
|
grep "404 - Object does not exist" gitweb.output
|
||||||
|
'
|
||||||
|
test_debug 'cat gitweb.output'
|
||||||
|
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user