Commit Diff


commit - 0f71f6196dbf9f3afd34524586b8bfdb2d1eaccd
commit + 59b21794ec192212e590f29fd2957e73dc5dc5fe
blob - 2e421bd245bb3702600302716d83053e5785c51a
blob + 884cbfab86cc8fe210c5fe53fddb3417cb415a7c
--- lib/pack_create.c
+++ lib/pack_create.c
@@ -1193,10 +1193,10 @@ genpack(uint8_t *pack_sha1, FILE *packfile, FILE *delt
 			goto done;
 		m = meta[i];
 		m->off = ftello(packfile);
-		err = got_object_raw_open(&raw, &outfd, repo, &m->id);
-		if (err)
-			goto done;
 		if (m->delta_len == 0) {
+			err = got_object_raw_open(&raw, &outfd, repo, &m->id);
+			if (err)
+				goto done;
 			err = packhdr(&nh, buf, sizeof(buf),
 			    m->obj_type, raw->size);
 			if (err)
@@ -1214,6 +1214,8 @@ genpack(uint8_t *pack_sha1, FILE *packfile, FILE *delt
 			if (err)
 				goto done;
 			packfile_size += outlen;
+			got_object_raw_close(raw);
+			raw = NULL;
 		} else {
 			off_t remain;
 			if (delta_file == NULL) {
@@ -1290,8 +1292,6 @@ genpack(uint8_t *pack_sha1, FILE *packfile, FILE *delt
 				goto done;
 			packfile_size += outlen;
 		}
-		got_object_raw_close(raw);
-		raw = NULL;
 	}
 	SHA1Final(pack_sha1, &ctx);
 	n = fwrite(pack_sha1, 1, SHA1_DIGEST_LENGTH, packfile);