ref: cdac77529a3f7416843b1d455d413c9b0f21cfff
parent: 32f84b9d89d34ab74f8843f939f8d1d811d403ad
author: Runxi Yu <runxiyu@umich.edu>
date: Sun Mar 29 06:22:19 EDT 2026
object/id: Zero is a property of the algorithm
--- a/network/protocol/v0v1/server/advertise.go
+++ b/network/protocol/v0v1/server/advertise.go
@@ -3,8 +3,6 @@
import (
"fmt"
"strings"
-
- objectid "codeberg.org/lindenii/furgit/object/id"
)
// AdvertiseRefs writes one server ref advertisement.
@@ -20,7 +18,7 @@
refs := sortAdvertisedRefs(ad.Refs)
if len(refs) == 0 {- line := fmt.Sprintf("%s capabilities^{}\x00%s\n", objectid.Zero(session.opts.Algorithm), capList)+ line := fmt.Sprintf("%s capabilities^{}\x00%s\n", session.opts.Algorithm.Zero(), capList)err := session.enc.WriteData([]byte(line))
if err != nil {--- a/network/protocol/v0v1/server/advertise_test.go
+++ b/network/protocol/v0v1/server/advertise_test.go
@@ -93,7 +93,7 @@
got := out.String()
- want := objectid.Zero(algo).String() + " capabilities^{}\x00report-status object-format=" + algo.String() + "\n"+ want := algo.Zero().String() + " capabilities^{}\x00report-status object-format=" + algo.String() + "\n" if !strings.Contains(got, want) { t.Fatalf("unexpected no-refs advertisement %q", got)}
--- a/network/protocol/v0v1/server/receivepack/parse_test.go
+++ b/network/protocol/v0v1/server/receivepack/parse_test.go
@@ -19,7 +19,7 @@
testgit.ForEachAlgorithm(t, func(t *testing.T, algo objectid.Algorithm) {t.Parallel()
- oldZero := objectid.Zero(algo).String()
+ oldZero := algo.Zero().String()
oneID := mustHexID(t, algo, "1")
var wire bufferWriteFlusher
@@ -105,7 +105,7 @@
enc := pktline.NewEncoder(&wire)
err := enc.WriteData([]byte(
- oneID.String() + " " + objectid.Zero(algo).String() + " refs/heads/old\x00delete-refs object-format=" + algo.String() + "\n",
+ oneID.String() + " " + algo.Zero().String() + " refs/heads/old\x00delete-refs object-format=" + algo.String() + "\n",
))
if err != nil { t.Fatalf("WriteData: %v", err)@@ -153,7 +153,7 @@
enc := pktline.NewEncoder(&wire)
err := enc.WriteData([]byte(
- objectid.Zero(algo).String() + " " + oneID.String() + " refs/heads/main\x00atomic object-format=" + algo.String() + "\n",
+ algo.Zero().String() + " " + oneID.String() + " refs/heads/main\x00atomic object-format=" + algo.String() + "\n",
))
if err != nil { t.Fatalf("WriteData: %v", err)@@ -209,7 +209,7 @@
"nonce nonce\n",
"push-option ci.skip\n",
"\n",
- objectid.Zero(algo).String() + " " + oneID.String() + " refs/heads/main\n",
+ algo.Zero().String() + " " + oneID.String() + " refs/heads/main\n",
"-----BEGIN PGP SIGNATURE-----\n",
"abcdef\n",
"push-cert-end\n",
--- a/network/protocol/v0v1/server/receivepack/report_status_test.go
+++ b/network/protocol/v0v1/server/receivepack/report_status_test.go
@@ -59,7 +59,7 @@
requestEnc := pktline.NewEncoder(&requestWire)
err := requestEnc.WriteData([]byte(
- objectid.Zero(algo).String() + " " + mustHexID(t, algo, "1").String() + " refs/heads/main\x00report-status side-band-64k object-format=" + algo.String() + "\n",
+ algo.Zero().String() + " " + mustHexID(t, algo, "1").String() + " refs/heads/main\x00report-status side-band-64k object-format=" + algo.String() + "\n",
))
if err != nil { t.Fatalf("WriteData(request): %v", err)@@ -243,7 +243,7 @@
requestEnc := pktline.NewEncoder(&requestWire)
err := requestEnc.WriteData([]byte(
- objectid.Zero(algo).String() + " " + mustHexID(t, algo, "1").String() + " refs/heads/main\x00report-status side-band-64k object-format=" + algo.String() + "\n",
+ algo.Zero().String() + " " + mustHexID(t, algo, "1").String() + " refs/heads/main\x00report-status side-band-64k object-format=" + algo.String() + "\n",
))
if err != nil { t.Fatalf("WriteData(request): %v", err)--- a/network/protocol/v0v1/server/receivepack/session.go
+++ b/network/protocol/v0v1/server/receivepack/session.go
@@ -208,7 +208,7 @@
}
func commandIsDelete(cmd Command) bool {- return cmd.NewID == objectid.Zero(cmd.NewID.Algorithm())
+ return cmd.NewID == cmd.NewID.Algorithm().Zero()
}
func deleteOnly(commands []Command) bool {--- a/network/receivepack/hooks/reject_force_push.go
+++ b/network/receivepack/hooks/reject_force_push.go
@@ -7,7 +7,6 @@
"codeberg.org/lindenii/furgit/commitquery"
receivepack "codeberg.org/lindenii/furgit/network/receivepack"
- objectid "codeberg.org/lindenii/furgit/object/id"
objectmix "codeberg.org/lindenii/furgit/object/store/mix"
refstore "codeberg.org/lindenii/furgit/ref/store"
)
@@ -33,7 +32,7 @@
}
for i, update := range req.Updates {- if update.OldID == objectid.Zero(update.OldID.Algorithm()) || update.NewID == objectid.Zero(update.NewID.Algorithm()) {+ if update.OldID == update.OldID.Algorithm().Zero() || update.NewID == update.NewID.Algorithm().Zero() {continue
}
--- a/network/receivepack/int_test.go
+++ b/network/receivepack/int_test.go
@@ -36,7 +36,7 @@
)
input.WriteString(pktlineData(
- commitID.String() + " " + objectid.Zero(algo).String() + " refs/heads/main\x00report-status atomic delete-refs object-format=" + algo.String() + "\n",
+ commitID.String() + " " + algo.Zero().String() + " refs/heads/main\x00report-status atomic delete-refs object-format=" + algo.String() + "\n",
))
input.WriteString("0000")@@ -83,10 +83,10 @@
)
input.WriteString(pktlineData(
- staleID.String() + " " + objectid.Zero(algo).String() + " refs/heads/main\x00report-status delete-refs object-format=" + algo.String() + "\n",
+ staleID.String() + " " + algo.Zero().String() + " refs/heads/main\x00report-status delete-refs object-format=" + algo.String() + "\n",
))
input.WriteString(pktlineData(
- commitID.String() + " " + objectid.Zero(algo).String() + " refs/heads/topic\n",
+ commitID.String() + " " + algo.Zero().String() + " refs/heads/topic\n",
))
input.WriteString("0000")@@ -138,10 +138,10 @@
)
input.WriteString(pktlineData(
- staleID.String() + " " + objectid.Zero(algo).String() + " refs/heads/main\x00report-status atomic delete-refs object-format=" + algo.String() + "\n",
+ staleID.String() + " " + algo.Zero().String() + " refs/heads/main\x00report-status atomic delete-refs object-format=" + algo.String() + "\n",
))
input.WriteString(pktlineData(
- commitID.String() + " " + objectid.Zero(algo).String() + " refs/heads/topic\n",
+ commitID.String() + " " + algo.Zero().String() + " refs/heads/topic\n",
))
input.WriteString("0000")@@ -242,7 +242,7 @@
)
input.WriteString(pktlineData(
- commitID.String() + " " + objectid.Zero(algo).String() + " refs/heads/main\x00delete-refs atomic object-format=" + algo.String() + "\n",
+ commitID.String() + " " + algo.Zero().String() + " refs/heads/main\x00delete-refs atomic object-format=" + algo.String() + "\n",
))
input.WriteString("0000")@@ -281,7 +281,7 @@
)
input.WriteString(pktlineData(
- commitID.String() + " " + objectid.Zero(algo).String() + " refs/heads/main\x00report-status atomic delete-refs object-format=" + algo.String() + "\n",
+ commitID.String() + " " + algo.Zero().String() + " refs/heads/main\x00report-status atomic delete-refs object-format=" + algo.String() + "\n",
))
input.WriteString("0000")@@ -365,7 +365,7 @@
)
input.WriteString(pktlineData(
- objectid.Zero(algo).String() + " " + commitID.String() + " refs/heads/main\x00report-status-v2 atomic object-format=" + algo.String() + "\n",
+ algo.Zero().String() + " " + commitID.String() + " refs/heads/main\x00report-status-v2 atomic object-format=" + algo.String() + "\n",
))
input.WriteString("0000")@@ -437,7 +437,7 @@
)
input.WriteString(pktlineData(
- objectid.Zero(algo).String() + " " + commitID.String() + " refs/heads/main\x00report-status-v2 atomic object-format=" + algo.String() + "\n",
+ algo.Zero().String() + " " + commitID.String() + " refs/heads/main\x00report-status-v2 atomic object-format=" + algo.String() + "\n",
))
input.WriteString("0000")@@ -519,10 +519,10 @@
)
input.WriteString(pktlineData(
- commitID.String() + " " + objectid.Zero(algo).String() + " refs/heads/main\x00report-status delete-refs object-format=" + algo.String() + "\n",
+ commitID.String() + " " + algo.Zero().String() + " refs/heads/main\x00report-status delete-refs object-format=" + algo.String() + "\n",
))
input.WriteString(pktlineData(
- commitID.String() + " " + objectid.Zero(algo).String() + " refs/heads/topic\n",
+ commitID.String() + " " + algo.Zero().String() + " refs/heads/topic\n",
))
input.WriteString("0000")@@ -577,7 +577,7 @@
)
input.WriteString(pktlineData(
- commitID.String() + " " + objectid.Zero(algo).String() + " refs/heads/main\x00report-status side-band-64k atomic delete-refs object-format=" + algo.String() + "\n",
+ commitID.String() + " " + algo.Zero().String() + " refs/heads/main\x00report-status side-band-64k atomic delete-refs object-format=" + algo.String() + "\n",
))
input.WriteString("0000")@@ -725,7 +725,7 @@
)
input.WriteString(pktlineData(
- commitID.String() + " " + objectid.Zero(algo).String() + " refs/heads/main\x00report-status-v2 atomic delete-refs object-format=" + algo.String() + "\n",
+ commitID.String() + " " + algo.Zero().String() + " refs/heads/main\x00report-status-v2 atomic delete-refs object-format=" + algo.String() + "\n",
))
input.WriteString("0000")@@ -747,7 +747,7 @@
t.Fatalf("missing option old-oid in %q", got)}
- if !strings.Contains(got, "option new-oid "+objectid.Zero(algo).String()+"\n") {+ if !strings.Contains(got, "option new-oid "+algo.Zero().String()+"\n") { t.Fatalf("missing option new-oid in %q", got)}
})
--- a/network/receivepack/service/apply.go
+++ b/network/receivepack/service/apply.go
@@ -2,7 +2,6 @@
import (
"codeberg.org/lindenii/furgit/internal/utils"
- objectid "codeberg.org/lindenii/furgit/object/id"
refstore "codeberg.org/lindenii/furgit/ref/store"
)
@@ -101,7 +100,7 @@
return tx.Delete(command.Name, command.OldID)
}
- if command.OldID == objectid.Zero(command.OldID.Algorithm()) {+ if command.OldID == command.OldID.Algorithm().Zero() {return tx.Create(command.Name, command.NewID)
}
@@ -115,7 +114,7 @@
return
}
- if command.OldID == objectid.Zero(command.OldID.Algorithm()) {+ if command.OldID == command.OldID.Algorithm().Zero() {batch.Create(command.Name, command.NewID)
return
--- a/network/receivepack/service/command.go
+++ b/network/receivepack/service/command.go
@@ -22,7 +22,7 @@
}
func isDelete(command Command) bool {- return command.NewID == objectid.Zero(command.NewID.Algorithm())
+ return command.NewID == command.NewID.Algorithm().Zero()
}
func objectIDPointer(id objectid.ObjectID) *objectid.ObjectID {--- a/network/receivepack/service/service_test.go
+++ b/network/receivepack/service/service_test.go
@@ -29,8 +29,8 @@
result, err := svc.Execute(context.Background(), &service.Request{ Commands: []service.Command{{Name: "refs/heads/main",
- OldID: objectid.Zero(algo),
- NewID: objectid.Zero(algo),
+ OldID: algo.Zero(),
+ NewID: algo.Zero(),
}},
PackExpected: true,
Pack: strings.NewReader("not a pack"),@@ -73,8 +73,8 @@
result, err := svc.Execute(context.Background(), &service.Request{ Commands: []service.Command{{Name: "refs/heads/main",
- OldID: objectid.Zero(algo),
- NewID: objectid.Zero(algo),
+ OldID: algo.Zero(),
+ NewID: algo.Zero(),
}},
PackExpected: true,
Pack: strings.NewReader("not a pack"),--- /dev/null
+++ b/object/id/algorithm_zero.go
@@ -1,0 +1,11 @@
+package objectid
+
+// Zero returns the all-zero object ID for this algorithm.
+func (algo Algorithm) Zero() ObjectID {+ id, err := FromBytes(algo, make([]byte, algo.Size()))
+ if err != nil {+ panic(err)
+ }
+
+ return id
+}
--- a/object/id/objectid_zero.go
+++ /dev/null
@@ -1,11 +1,0 @@
-package objectid
-
-// Zero returns the all-zero object ID for the specified algorithm.
-func Zero(algo Algorithm) ObjectID {- id, err := FromBytes(algo, make([]byte, algo.Size()))
- if err != nil {- panic(err)
- }
-
- return id
-}
--
⑨