diff --git a/.gitignore b/.gitignore index a2336fd..3c638a9 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,5 @@ .idea *.iml +# local notes +notes.txt \ No newline at end of file diff --git a/internal/workers/findref.go b/internal/workers/findref.go index 3f62ba9..b257076 100644 --- a/internal/workers/findref.go +++ b/internal/workers/findref.go @@ -61,7 +61,7 @@ func FindRefWorker(jt *jobtracker.JobTracker, path string, context jobtracker.Co jt.AddJob(fmt.Sprintf(".git/logs/refs/remotes/origin/%s", branch[1])) } } - if path == ".git/config" { + if path == ".git/config" || path == ".git/config.worktree" { cfg, err := ini.Load(content) if err != nil { log.Error().Str("file", targetFile).Err(err).Msg("failed to parse git config") @@ -126,7 +126,7 @@ func FindRefWorker(jt *jobtracker.JobTracker, path string, context jobtracker.Co jt.AddJob(fmt.Sprintf(".git/logs/refs/remotes/origin/%s", branch[1])) } } - if path == ".git/config" { + if path == ".git/config" || path == ".git/config.worktree" { cfg, err := ini.Load(body) if err != nil { log.Error().Str("file", targetFile).Err(err).Msg("failed to parse git config") diff --git a/pkg/goop/clone.go b/pkg/goop/clone.go index 72aac83..757a6a4 100644 --- a/pkg/goop/clone.go +++ b/pkg/goop/clone.go @@ -205,8 +205,11 @@ func FetchGit(baseUrl, baseDir string) error { hashes := packRegex.FindAllSubmatch(infoPacks, -1) jt = jobtracker.NewJobTracker(workers.DownloadWorker, maxConcurrency, jobtracker.DefaultNapper) for _, sha1 := range hashes { - jt.AddJob(fmt.Sprintf(".git/objects/pack/pack-%s.idx", sha1[1])) - jt.AddJob(fmt.Sprintf(".git/objects/pack/pack-%s.pack", sha1[1])) + jt.AddJobs( + fmt.Sprintf(".git/objects/pack/pack-%s.idx", sha1[1]), + fmt.Sprintf(".git/objects/pack/pack-%s.pack", sha1[1]), + fmt.Sprintf(".git/objects/pack/pack-%s.rev", sha1[1]), + ) } jt.StartAndWait(workers.DownloadContext{C: c, BaseUrl: baseUrl, BaseDir: baseDir}, false) } diff --git a/pkg/goop/consts.go b/pkg/goop/consts.go index fb22d9d..2160145 100644 --- a/pkg/goop/consts.go +++ b/pkg/goop/consts.go @@ -35,18 +35,40 @@ var ( ".git/index", ".git/info/exclude", ".git/objects/info/packs", + ".git/objects/info/alternates", // TODO: parse and process + ".git/objects/info/http-alternates", // TODO: parse and process + ".git/objects/info/commit-graph", // TODO: parse for object hashes + ".git/objects/info/commit-graphs/commit-graph-chain", // TODO: read file and fetch mentioned graph files too, then parse those for object hashes + ".git/info/grafts", // TODO: parse and process + ".git/info/attributes", // TODO: can lfs filters be in here? + ".git/info/sparse-checkout", // TODO: parse and process + ".git/objects/loose-object-idx", // TODO: parse and process + ".git/objects/pack/multi-pack-index", // TODO: parse and process } commonRefs = []string{ ".git/FETCH_HEAD", ".git/HEAD", ".git/ORIG_HEAD", ".git/config", + ".git/config.worktree", ".git/info/refs", ".git/logs/HEAD", ".git/logs/refs/heads/master", ".git/logs/refs/heads/main", ".git/logs/refs/heads/dev", ".git/logs/refs/heads/develop", + ".git/logs/refs/tags/alpha", + ".git/logs/refs/tags/beta", + ".git/logs/refs/tags/stable", + ".git/logs/refs/tags/release", + ".git/logs/refs/tags/1.0", + ".git/logs/refs/tags/1.0.0", + ".git/logs/refs/tags/2.0", + ".git/logs/refs/tags/2.0.0", + ".git/logs/refs/tags/v1.0", + ".git/logs/refs/tags/v1.0.0", + ".git/logs/refs/tags/v2.0", + ".git/logs/refs/tags/v2.0.0", ".git/logs/refs/remotes/origin/HEAD", ".git/logs/refs/remotes/origin/master", ".git/logs/refs/remotes/origin/main", @@ -58,6 +80,18 @@ var ( ".git/refs/heads/main", ".git/refs/heads/dev", ".git/refs/heads/develop", + ".git/refs/tags/alpha", + ".git/refs/tags/beta", + ".git/refs/tags/stable", + ".git/refs/tags/release", + ".git/refs/tags/1.0", + ".git/refs/tags/1.0.0", + ".git/refs/tags/2.0", + ".git/refs/tags/2.0.0", + ".git/refs/tags/v1.0", + ".git/refs/tags/v1.0.0", + ".git/refs/tags/v2.0", + ".git/refs/tags/v2.0.0", ".git/refs/remotes/origin/HEAD", ".git/refs/remotes/origin/master", ".git/refs/remotes/origin/main",