mirror of
https://github.com/moby/buildkit.git
synced 2025-10-25 16:57:55 +03:00
git: fix subdir filter on submodule dir
Because subdir filter happened before the submodule update it resulted in empty directory being filtered and submodule update being skipped because .gitmodules was already missing. Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
@@ -567,6 +567,7 @@ func (gs *gitSourceHandler) Snapshot(ctx context.Context, g session.Group) (out
|
||||
}
|
||||
}
|
||||
|
||||
cd := checkoutDir
|
||||
if gs.src.KeepGitDir && subdir == "." {
|
||||
checkoutDirGit := filepath.Join(checkoutDir, ".git")
|
||||
if err := os.MkdirAll(checkoutDir, 0711); err != nil {
|
||||
@@ -624,7 +625,6 @@ func (gs *gitSourceHandler) Snapshot(ctx context.Context, g session.Group) (out
|
||||
}
|
||||
gitDir = checkoutDirGit
|
||||
} else {
|
||||
cd := checkoutDir
|
||||
if subdir != "." {
|
||||
cd, err = os.MkdirTemp(cd, "checkout")
|
||||
if err != nil {
|
||||
@@ -636,41 +636,42 @@ func (gs *gitSourceHandler) Snapshot(ctx context.Context, g session.Group) (out
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to checkout remote %s", urlutil.RedactCredentials(gs.src.Remote))
|
||||
}
|
||||
if subdir != "." {
|
||||
d, err := os.Open(filepath.Join(cd, subdir))
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to open subdir %v", subdir)
|
||||
}
|
||||
defer func() {
|
||||
if d != nil {
|
||||
d.Close()
|
||||
}
|
||||
}()
|
||||
names, err := d.Readdirnames(0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, n := range names {
|
||||
if err := os.Rename(filepath.Join(cd, subdir, n), filepath.Join(checkoutDir, n)); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
if err := d.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
d = nil // reset defer
|
||||
if err := os.RemoveAll(cd); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
git = git.New(gitutil.WithWorkTree(checkoutDir), gitutil.WithGitDir(gitDir))
|
||||
git = git.New(gitutil.WithWorkTree(cd), gitutil.WithGitDir(gitDir))
|
||||
_, err = git.Run(ctx, "submodule", "update", "--init", "--recursive", "--depth=1")
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to update submodules for %s", urlutil.RedactCredentials(gs.src.Remote))
|
||||
}
|
||||
|
||||
if subdir != "." {
|
||||
d, err := os.Open(filepath.Join(cd, subdir))
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to open subdir %v", subdir)
|
||||
}
|
||||
defer func() {
|
||||
if d != nil {
|
||||
d.Close()
|
||||
}
|
||||
}()
|
||||
names, err := d.Readdirnames(0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, n := range names {
|
||||
if err := os.Rename(filepath.Join(cd, subdir, n), filepath.Join(checkoutDir, n)); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
if err := d.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
d = nil // reset defer
|
||||
if err := os.RemoveAll(cd); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
if idmap := mount.IdentityMapping(); idmap != nil {
|
||||
uid, gid := idmap.RootPair()
|
||||
err := filepath.WalkDir(gitDir, func(p string, _ os.DirEntry, _ error) error {
|
||||
|
||||
Reference in New Issue
Block a user