aboutsummaryrefslogtreecommitdiff
path: root/src/Package/Fetch/git.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2024-02-16 00:56:13 -0700
committerAndrew Kelley <andrew@ziglang.org>2024-02-23 02:37:11 -0700
commit99a5de9dbb0a3a30f09056558f715f7607b1a20a (patch)
treeeedca0be26422424b81c38d8c2c8b1ae48275f59 /src/Package/Fetch/git.zig
parentb6ca89fa7c0c4c766229586f1977babfb20d782a (diff)
downloadzig-99a5de9dbb0a3a30f09056558f715f7607b1a20a.tar.gz
zig-99a5de9dbb0a3a30f09056558f715f7607b1a20a.zip
git fetching: fix redirect handling
I mistakenly thought this was dead code in an earlier commit in this branch. This commit restores the proper behavior.
Diffstat (limited to 'src/Package/Fetch/git.zig')
-rw-r--r--src/Package/Fetch/git.zig11
1 files changed, 4 insertions, 7 deletions
diff --git a/src/Package/Fetch/git.zig b/src/Package/Fetch/git.zig
index 9fbb881417..dc0c844d1d 100644
--- a/src/Package/Fetch/git.zig
+++ b/src/Package/Fetch/git.zig
@@ -530,8 +530,9 @@ pub const Session = struct {
info_refs_uri.query = "service=git-upload-pack";
info_refs_uri.fragment = null;
+ const max_redirects = 3;
var request = try session.transport.open(.GET, info_refs_uri, .{
- .redirect_behavior = @enumFromInt(3),
+ .redirect_behavior = @enumFromInt(max_redirects),
.server_header_buffer = http_headers_buffer,
.extra_headers = &.{
.{ .name = "Git-Protocol", .value = "version=2" },
@@ -543,12 +544,8 @@ pub const Session = struct {
try request.wait();
if (request.response.status != .ok) return error.ProtocolError;
- // Pretty sure this is dead code - in order for a redirect to occur, the status
- // code would need to be in the 300s and then it would not be "OK" which is checked
- // on the line above.
- var runtime_false = false;
- _ = &runtime_false;
- if (runtime_false) {
+ const any_redirects_occurred = request.redirect_behavior.remaining() < max_redirects;
+ if (any_redirects_occurred) {
if (!mem.endsWith(u8, request.uri.path, "/info/refs")) return error.UnparseableRedirect;
var new_uri = request.uri;
new_uri.path = new_uri.path[0 .. new_uri.path.len - "/info/refs".len];