Skip to content

Commit 9098282

Browse files
authored
[push] Simplify git clone for push (#1096)
## Summary 1. clone `.git` only for push (See https://stackoverflow.com/questions/38999901/clone-only-the-git-directory-of-a-git-repo for more information) 2. add `CreateDevboxTempDIr` to `fileutil` and reuse it in more cases ## How was it tested?
1 parent 5ee6b58 commit 9098282

File tree

5 files changed

+29
-27
lines changed

5 files changed

+29
-27
lines changed

internal/boxcli/push.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package boxcli
66
import (
77
"github.com/pkg/errors"
88
"github.com/spf13/cobra"
9+
910
"go.jetpack.io/devbox"
1011
)
1112

internal/fileutil/dir.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,8 @@ func ClearDir(dir string) error {
3838
}
3939
return errors.WithStack(os.MkdirAll(dir, mode))
4040
}
41+
42+
func CreateDevboxTempDir() (string, error) {
43+
tmpDir, err := os.MkdirTemp("", "devbox")
44+
return tmpDir, errors.WithStack(err)
45+
}

internal/pullbox/config.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ import (
88
"os"
99
"path/filepath"
1010

11-
"github.com/pkg/errors"
1211
"go.jetpack.io/devbox/internal/cuecfg"
1312
"go.jetpack.io/devbox/internal/devconfig"
13+
"go.jetpack.io/devbox/internal/fileutil"
1414
)
1515

1616
func (p *pullbox) IsTextDevboxConfig() bool {
@@ -33,9 +33,9 @@ func (p *pullbox) pullTextDevboxConfig() error {
3333
return err
3434
}
3535

36-
tmpDir, err := os.MkdirTemp("", "devbox")
36+
tmpDir, err := fileutil.CreateDevboxTempDir()
3737
if err != nil {
38-
return errors.WithStack(err)
38+
return err
3939
}
4040
if err = cfg.SaveTo(tmpDir); err != nil {
4141
return err

internal/pullbox/git/git.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,22 @@
44
package git
55

66
import (
7-
"os"
87
"strings"
98

109
"github.com/pkg/errors"
10+
1111
"go.jetpack.io/devbox/internal/cmdutil"
12+
"go.jetpack.io/devbox/internal/fileutil"
1213
)
1314

1415
func CloneToTmp(repo string) (string, error) {
15-
tmpDir, err := os.MkdirTemp("", "devbox")
16+
tmpDir, err := fileutil.CreateDevboxTempDir()
1617
if err != nil {
17-
return "", errors.WithStack(err)
18+
return "", err
1819
}
20+
1921
if err := clone(repo, tmpDir); err != nil {
20-
return "", errors.WithStack(err)
22+
return "", err
2123
}
2224
return tmpDir, nil
2325
}

internal/pullbox/git/push.go

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,26 @@
1+
// Copyright 2023 Jetpack Technologies Inc and contributors. All rights reserved.
2+
// Use of this source code is governed by the license in the LICENSE file.
3+
14
package git
25

36
import (
4-
"os"
5-
"path/filepath"
67
"strings"
78

89
"github.com/pkg/errors"
10+
911
"go.jetpack.io/devbox/internal/cmdutil"
1012
"go.jetpack.io/devbox/internal/fileutil"
1113
)
1214

1315
const nothingToCommitErrorText = "nothing to commit"
1416

1517
func Push(dir, url string) error {
16-
tmpDir, err := CloneToTmp(url)
18+
tmpDir, err := fileutil.CreateDevboxTempDir()
1719
if err != nil {
1820
return err
1921
}
20-
if err := removeNonGitFiles(tmpDir); err != nil {
22+
23+
if err := cloneGitHistory(url, tmpDir); err != nil {
2124
return err
2225
}
2326

@@ -32,6 +35,13 @@ func Push(dir, url string) error {
3235
return push(tmpDir)
3336
}
3437

38+
func cloneGitHistory(url, dst string) error {
39+
// See https://stackoverflow.com/questions/38999901/clone-only-the-git-directory-of-a-git-repo
40+
cmd := cmdutil.CommandTTY("git", "clone", "--no-checkout", url, dst)
41+
cmd.Dir = dst
42+
return errors.WithStack(cmd.Run())
43+
}
44+
3545
func createCommit(dir string) error {
3646
cmd := cmdutil.CommandTTY("git", "add", ".")
3747
cmd.Dir = dir
@@ -54,19 +64,3 @@ func push(dir string) error {
5464
err := cmd.Run()
5565
return errors.WithStack(err)
5666
}
57-
58-
func removeNonGitFiles(dir string) error {
59-
entries, err := os.ReadDir(dir)
60-
if err != nil {
61-
return err
62-
}
63-
for _, entry := range entries {
64-
if entry.Name() == ".git" {
65-
continue
66-
}
67-
if err := os.RemoveAll(filepath.Join(dir, entry.Name())); err != nil {
68-
return err
69-
}
70-
}
71-
return nil
72-
}

0 commit comments

Comments
 (0)