mirror of
https://github.com/TECHNOFAB11/jsonnet-bundler.git
synced 2025-12-12 08:00:05 +01:00
Shallow fetch for Git packages
If the server supports it, fetch a specific revision with --depth 1. Otherwise, fall back to the normal fetch. This replaces the previous "clone" operation. The bandwidth and time savings can be significant depending on the history of the repository (number of commits).
This commit is contained in:
parent
30d7929566
commit
671f860a19
1 changed files with 35 additions and 3 deletions
36
pkg/git.go
36
pkg/git.go
|
|
@ -37,15 +37,47 @@ func NewGitPackage(source *spec.GitSource) Interface {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *GitPackage) Install(ctx context.Context, dir, version string) (lockVersion string, err error) {
|
func (p *GitPackage) Install(ctx context.Context, dir, version string) (lockVersion string, err error) {
|
||||||
cmd := exec.CommandContext(ctx, "git", "clone", "-n", p.Source.Remote, dir)
|
cmd := exec.CommandContext(ctx, "git", "init")
|
||||||
cmd.Stdin = os.Stdin
|
cmd.Stdin = os.Stdin
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
|
cmd.Dir = dir
|
||||||
err = cmd.Run()
|
err = cmd.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cmd = exec.CommandContext(ctx, "git", "remote", "add", "origin", p.Source.Remote)
|
||||||
|
cmd.Stdin = os.Stdin
|
||||||
|
cmd.Stdout = os.Stdout
|
||||||
|
cmd.Stderr = os.Stderr
|
||||||
|
cmd.Dir = dir
|
||||||
|
err = cmd.Run()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attempt shallow fetch at specific revision
|
||||||
|
cmd = exec.CommandContext(ctx, "git", "fetch", "--depth", "1", "origin", version)
|
||||||
|
cmd.Stdin = os.Stdin
|
||||||
|
cmd.Stdout = os.Stdout
|
||||||
|
cmd.Stderr = os.Stderr
|
||||||
|
cmd.Dir = dir
|
||||||
|
err = cmd.Run()
|
||||||
|
if err != nil {
|
||||||
|
// Fall back to normal fetch (all revisions)
|
||||||
|
cmd = exec.CommandContext(ctx, "git", "fetch", "origin")
|
||||||
|
cmd.Stdin = os.Stdin
|
||||||
|
cmd.Stdout = os.Stdout
|
||||||
|
cmd.Stderr = os.Stderr
|
||||||
|
cmd.Dir = dir
|
||||||
|
err = cmd.Run()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If a Subdir is specificied, a sparsecheckout is sufficient
|
||||||
if p.Source.Subdir != "" {
|
if p.Source.Subdir != "" {
|
||||||
cmd = exec.CommandContext(ctx, "git", "config", "core.sparsecheckout", "true")
|
cmd = exec.CommandContext(ctx, "git", "config", "core.sparsecheckout", "true")
|
||||||
cmd.Stdin = os.Stdin
|
cmd.Stdin = os.Stdin
|
||||||
|
|
@ -57,7 +89,7 @@ func (p *GitPackage) Install(ctx context.Context, dir, version string) (lockVers
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
glob := []byte(p.Source.Subdir + "/*\n")
|
glob := []byte(p.Source.Subdir + "/*\n")
|
||||||
ioutil.WriteFile(dir + "/.git/info/sparse-checkout", glob, 0644)
|
ioutil.WriteFile(dir+"/.git/info/sparse-checkout", glob, 0644)
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd = exec.CommandContext(ctx, "git", "-c", "advice.detachedHead=false", "checkout", version)
|
cmd = exec.CommandContext(ctx, "git", "-c", "advice.detachedHead=false", "checkout", version)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue