shithub: furgit

Download patch

ref: 101fe6a0d74543bab7cb9876e3bea1f2d21a592a
parent: abce6092bf50a1878934e2b442c6781e6aff3fca
author: Runxi Yu <runxiyu@umich.edu>
date: Sun Mar 29 09:29:01 EDT 2026

cmd/index-pack: Split files

--- /dev/null
+++ b/cmd/index-pack/algorithm.go
@@ -1,0 +1,25 @@
+package main
+
+import (
+	"fmt"
+
+	objectid "codeberg.org/lindenii/furgit/object/id"
+	"codeberg.org/lindenii/furgit/repository"
+)
+
+func resolveAlgorithm(repo *repository.Repository, objectFormat string) (objectid.Algorithm, error) {
+	if objectFormat != "" {
+		algo, ok := objectid.ParseAlgorithm(objectFormat)
+		if !ok {
+			return objectid.AlgorithmUnknown, fmt.Errorf("invalid object format %q", objectFormat)
+		}
+
+		return algo, nil
+	}
+
+	if repo != nil {
+		return repo.Algorithm(), nil
+	}
+
+	return objectid.AlgorithmSHA1, nil
+}
--- a/cmd/index-pack/main.go
+++ b/cmd/index-pack/main.go
@@ -3,15 +3,7 @@
 
 import (
 	"flag"
-	"fmt"
 	"log"
-	"os"
-	"path/filepath"
-
-	"codeberg.org/lindenii/furgit/format/packfile/ingest"
-	objectid "codeberg.org/lindenii/furgit/object/id"
-	objectstore "codeberg.org/lindenii/furgit/object/store"
-	"codeberg.org/lindenii/furgit/repository"
 )
 
 func main() {
@@ -31,104 +23,4 @@
 	if err != nil {
 		log.Fatalf("run: %v", err)
 	}
-}
-
-func run(repoPath, destinationPath, objectFormat string, fixThin, writeRev bool) error {
-	var (
-		algo objectid.Algorithm
-		base objectstore.ReadingStore
-		repo *repository.Repository
-	)
-
-	if repoPath != "" {
-		repoRoot, err := os.OpenRoot(repoPath)
-		if err != nil {
-			return fmt.Errorf("open repo root: %w", err)
-		}
-
-		defer func() { _ = repoRoot.Close() }()
-
-		repo, err = repository.Open(repoRoot)
-		if err != nil {
-			return fmt.Errorf("open repository: %w", err)
-		}
-
-		defer func() { _ = repo.Close() }()
-	}
-
-	algo, err := resolveAlgorithm(repo, objectFormat)
-	if err != nil {
-		return err
-	}
-
-	if fixThin {
-		if repo == nil {
-			return fmt.Errorf("fix-thin requires -r <repo>")
-		}
-
-		if repo.Algorithm() != algo {
-			return fmt.Errorf("algorithm mismatch: repo=%s flag=%s", repo.Algorithm(), algo)
-		}
-
-		base = repo.Objects()
-	}
-
-	absDestination, err := filepath.Abs(destinationPath)
-	if err != nil {
-		return fmt.Errorf("absolute destination path: %w", err)
-	}
-
-	destinationRoot, err := os.OpenRoot(absDestination)
-	if err != nil {
-		return fmt.Errorf("open destination root: %w", err)
-	}
-
-	defer func() { _ = destinationRoot.Close() }()
-
-	pending, err := ingest.Ingest(os.Stdin, algo, ingest.Options{
-		FixThin:            fixThin,
-		WriteRev:           writeRev,
-		Base:               base,
-		RequireTrailingEOF: true,
-	})
-	if err != nil {
-		return err
-	}
-
-	if pending.Header().ObjectCount == 0 {
-		discarded, err := pending.Discard()
-		if err != nil {
-			return err
-		}
-
-		_, _ = fmt.Fprintf(os.Stdout, "pack\t%s\n", discarded.PackHash.String())
-
-		return nil
-	}
-
-	result, err := pending.Continue(destinationRoot)
-	if err != nil {
-		return err
-	}
-
-	_, _ = fmt.Fprintf(os.Stdout, "pack\t%s\n", result.PackHash.String())
-
-	return nil
-}
-
-func resolveAlgorithm(repo *repository.Repository, objectFormat string) (objectid.Algorithm, error) {
-	if objectFormat != "" {
-		algo, ok := objectid.ParseAlgorithm(objectFormat)
-		if !ok {
-			return objectid.AlgorithmUnknown, fmt.Errorf("invalid object format %q", objectFormat)
-		}
-
-		return algo, nil
-	}
-
-	if repo != nil {
-		return repo.Algorithm(), nil
-	}
-
-	return objectid.AlgorithmSHA1, nil
 }
--- /dev/null
+++ b/cmd/index-pack/run.go
@@ -1,0 +1,95 @@
+package main
+
+import (
+	"fmt"
+	"os"
+	"path/filepath"
+
+	"codeberg.org/lindenii/furgit/format/packfile/ingest"
+	objectid "codeberg.org/lindenii/furgit/object/id"
+	objectstore "codeberg.org/lindenii/furgit/object/store"
+	"codeberg.org/lindenii/furgit/repository"
+)
+
+func run(repoPath, destinationPath, objectFormat string, fixThin, writeRev bool) error {
+	var (
+		algo objectid.Algorithm
+		base objectstore.ReadingStore
+		repo *repository.Repository
+	)
+
+	if repoPath != "" {
+		repoRoot, err := os.OpenRoot(repoPath)
+		if err != nil {
+			return fmt.Errorf("open repo root: %w", err)
+		}
+
+		defer func() { _ = repoRoot.Close() }()
+
+		repo, err = repository.Open(repoRoot)
+		if err != nil {
+			return fmt.Errorf("open repository: %w", err)
+		}
+
+		defer func() { _ = repo.Close() }()
+	}
+
+	algo, err := resolveAlgorithm(repo, objectFormat)
+	if err != nil {
+		return err
+	}
+
+	if fixThin {
+		if repo == nil {
+			return fmt.Errorf("fix-thin requires -r <repo>")
+		}
+
+		if repo.Algorithm() != algo {
+			return fmt.Errorf("algorithm mismatch: repo=%s flag=%s", repo.Algorithm(), algo)
+		}
+
+		base = repo.Objects()
+	}
+
+	absDestination, err := filepath.Abs(destinationPath)
+	if err != nil {
+		return fmt.Errorf("absolute destination path: %w", err)
+	}
+
+	destinationRoot, err := os.OpenRoot(absDestination)
+	if err != nil {
+		return fmt.Errorf("open destination root: %w", err)
+	}
+
+	defer func() { _ = destinationRoot.Close() }()
+
+	pending, err := ingest.Ingest(os.Stdin, algo, ingest.Options{
+		FixThin:            fixThin,
+		WriteRev:           writeRev,
+		Base:               base,
+		RequireTrailingEOF: true,
+	})
+	if err != nil {
+		return err
+	}
+
+	if pending.Header().ObjectCount == 0 {
+		discarded, err := pending.Discard()
+		if err != nil {
+			return err
+		}
+
+		_, _ = fmt.Fprintf(os.Stdout, "pack\t%s\n", discarded.PackHash.String())
+
+		return nil
+	}
+
+	result, err := pending.Continue(destinationRoot)
+	if err != nil {
+		return err
+	}
+
+	_, _ = fmt.Fprintf(os.Stdout, "pack\t%s\n", result.PackHash.String())
+
+	return nil
+}
--