aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-29 10:22:19 +0000
committerGravatar Runxi Yu2026-03-29 10:22:19 +0000
commitcdac77529a3f7416843b1d455d413c9b0f21cfff (patch)
tree274775de36c302716f43efdaffbb00ca5f3070f9
parentobject/id: Split files (diff)
signatureNo signature
object/id: Zero is a property of the algorithm v0.1.140
-rw-r--r--network/protocol/v0v1/server/advertise.go4
-rw-r--r--network/protocol/v0v1/server/advertise_test.go2
-rw-r--r--network/protocol/v0v1/server/receivepack/parse_test.go8
-rw-r--r--network/protocol/v0v1/server/receivepack/report_status_test.go4
-rw-r--r--network/protocol/v0v1/server/receivepack/session.go2
-rw-r--r--network/receivepack/hooks/reject_force_push.go3
-rw-r--r--network/receivepack/int_test.go28
-rw-r--r--network/receivepack/service/apply.go5
-rw-r--r--network/receivepack/service/command.go2
-rw-r--r--network/receivepack/service/service_test.go8
-rw-r--r--object/id/algorithm_zero.go (renamed from object/id/objectid_zero.go)4
11 files changed, 33 insertions, 37 deletions
diff --git a/network/protocol/v0v1/server/advertise.go b/network/protocol/v0v1/server/advertise.go
index 30468d1c..8ec7dfd9 100644
--- a/network/protocol/v0v1/server/advertise.go
+++ b/network/protocol/v0v1/server/advertise.go
@@ -3,8 +3,6 @@ package server
import (
"fmt"
"strings"
-
- objectid "codeberg.org/lindenii/furgit/object/id"
)
// AdvertiseRefs writes one server ref advertisement.
@@ -20,7 +18,7 @@ func (session *Session) AdvertiseRefs(ad Advertisement, capabilityTokens []strin
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 {
diff --git a/network/protocol/v0v1/server/advertise_test.go b/network/protocol/v0v1/server/advertise_test.go
index 3aac7056..3ad7a725 100644
--- a/network/protocol/v0v1/server/advertise_test.go
+++ b/network/protocol/v0v1/server/advertise_test.go
@@ -93,7 +93,7 @@ func TestAdvertiseRefsWritesNoRefsCapabilitiesLine(t *testing.T) {
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)
}
diff --git a/network/protocol/v0v1/server/receivepack/parse_test.go b/network/protocol/v0v1/server/receivepack/parse_test.go
index 3a891d3e..d54d8f8d 100644
--- a/network/protocol/v0v1/server/receivepack/parse_test.go
+++ b/network/protocol/v0v1/server/receivepack/parse_test.go
@@ -19,7 +19,7 @@ func TestReadRequestParsesCommandsAndPushOptions(t *testing.T) {
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 @@ func TestReadRequestDeleteOnlyDoesNotExpectPack(t *testing.T) {
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 @@ func TestReadRequestRejectsUnsupportedCapability(t *testing.T) {
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 @@ func TestReadRequestParsesPushCertificate(t *testing.T) {
"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",
diff --git a/network/protocol/v0v1/server/receivepack/report_status_test.go b/network/protocol/v0v1/server/receivepack/report_status_test.go
index 697311de..3cde5103 100644
--- a/network/protocol/v0v1/server/receivepack/report_status_test.go
+++ b/network/protocol/v0v1/server/receivepack/report_status_test.go
@@ -59,7 +59,7 @@ func TestWriteReportStatusUsesSideBand64KWhenNegotiated(t *testing.T) {
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 @@ func TestProgressWriterUsesSideBand64KWhenNegotiated(t *testing.T) {
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)
diff --git a/network/protocol/v0v1/server/receivepack/session.go b/network/protocol/v0v1/server/receivepack/session.go
index 65fa6b36..5299b42d 100644
--- a/network/protocol/v0v1/server/receivepack/session.go
+++ b/network/protocol/v0v1/server/receivepack/session.go
@@ -208,7 +208,7 @@ func parseObjectID(algo objectid.Algorithm, s string) (objectid.ObjectID, error)
}
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 {
diff --git a/network/receivepack/hooks/reject_force_push.go b/network/receivepack/hooks/reject_force_push.go
index 41153841..5902ef73 100644
--- a/network/receivepack/hooks/reject_force_push.go
+++ b/network/receivepack/hooks/reject_force_push.go
@@ -7,7 +7,6 @@ import (
"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 @@ func RejectForcePush() receivepack.Hook {
}
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
}
diff --git a/network/receivepack/int_test.go b/network/receivepack/int_test.go
index 360d66a9..79662bc1 100644
--- a/network/receivepack/int_test.go
+++ b/network/receivepack/int_test.go
@@ -36,7 +36,7 @@ func TestReceivePackDeleteOnlyAtomicDeleteSucceeds(t *testing.T) {
)
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 @@ func TestReceivePackDeleteOnlyNonAtomicAppliesIndependentDeletes(t *testing.T) {
)
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 @@ func TestReceivePackDeleteOnlyAtomicFailureLeavesAllRefsUntouched(t *testing.T)
)
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 @@ func TestReceivePackWithoutReportStatusWritesNoStatusPayload(t *testing.T) {
)
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 @@ func testReceivePackProtocolFallback(t *testing.T, gitProtocol string) {
)
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 @@ func TestReceivePackPackCreatePromotesObjectsAndUpdatesRef(t *testing.T) {
)
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 @@ func TestReceivePackHookSeesQuarantinedObjectsAndCanRejectBeforePromotion(t *tes
)
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 @@ func TestReceivePackHookCanRejectSubsetOfNonAtomicDeleteOnlyPush(t *testing.T) {
)
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 @@ func TestReceivePackHookProgressUsesSideBand64K(t *testing.T) {
)
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 @@ func TestReceivePackReportStatusV2IncludesRefDetails(t *testing.T) {
)
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 @@ func TestReceivePackReportStatusV2IncludesRefDetails(t *testing.T) {
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)
}
})
diff --git a/network/receivepack/service/apply.go b/network/receivepack/service/apply.go
index 8fa500ca..aae61340 100644
--- a/network/receivepack/service/apply.go
+++ b/network/receivepack/service/apply.go
@@ -2,7 +2,6 @@ package service
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 @@ func queueWriteTransaction(tx refstore.Transaction, command Command) error {
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 @@ func queueWriteBatch(batch refstore.Batch, command Command) {
return
}
- if command.OldID == objectid.Zero(command.OldID.Algorithm()) {
+ if command.OldID == command.OldID.Algorithm().Zero() {
batch.Create(command.Name, command.NewID)
return
diff --git a/network/receivepack/service/command.go b/network/receivepack/service/command.go
index 0fd8961e..4d234214 100644
--- a/network/receivepack/service/command.go
+++ b/network/receivepack/service/command.go
@@ -22,7 +22,7 @@ func fillCommandErrors(result *Result, commands []Command, errText string) {
}
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 {
diff --git a/network/receivepack/service/service_test.go b/network/receivepack/service/service_test.go
index fcbc355a..ffb08ea4 100644
--- a/network/receivepack/service/service_test.go
+++ b/network/receivepack/service/service_test.go
@@ -29,8 +29,8 @@ func TestExecutePackExpectedWithoutObjectsRoot(t *testing.T) {
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 @@ func TestExecuteRemovesDerivedQuarantineAfterIngestFailure(t *testing.T) {
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"),
diff --git a/object/id/objectid_zero.go b/object/id/algorithm_zero.go
index 9cc3d205..e8c0abf2 100644
--- a/object/id/objectid_zero.go
+++ b/object/id/algorithm_zero.go
@@ -1,7 +1,7 @@
package objectid
-// Zero returns the all-zero object ID for the specified algorithm.
-func Zero(algo Algorithm) 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)