mirror of https://github.com/databricks/cli.git
WIP syncinclude
This commit is contained in:
parent
6bcb33bf07
commit
c979694224
|
@ -93,6 +93,9 @@ func (d diff) String() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s snapshot) diff(all []git.File) (change diff) {
|
func (s snapshot) diff(all []git.File) (change diff) {
|
||||||
|
|
||||||
|
fmt.Println("[INFO] all files: ", all)
|
||||||
|
|
||||||
currentFilenames := map[string]bool{}
|
currentFilenames := map[string]bool{}
|
||||||
for _, f := range all {
|
for _, f := range all {
|
||||||
// create set of current files to figure out if removals are needed
|
// create set of current files to figure out if removals are needed
|
||||||
|
|
|
@ -22,7 +22,7 @@ func TestDiff(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
defer f2.Close()
|
defer f2.Close()
|
||||||
|
|
||||||
fileSet := git.NewFileSet(projectDir)
|
fileSet := git.NewFileSet(projectDir, nil)
|
||||||
files, err := fileSet.All()
|
files, err := fileSet.All()
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
state := snapshot{}
|
state := snapshot{}
|
||||||
|
|
|
@ -22,6 +22,8 @@ var syncCmd = &cobra.Command{
|
||||||
prj := project.Get(ctx)
|
prj := project.Get(ctx)
|
||||||
wsc := prj.WorkspacesClient()
|
wsc := prj.WorkspacesClient()
|
||||||
|
|
||||||
|
fmt.Println("[INFO] sync string array: ", *syncInclude)
|
||||||
|
|
||||||
if *remotePath == "" {
|
if *remotePath == "" {
|
||||||
me, err := prj.Me()
|
me, err := prj.Me()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -44,7 +46,7 @@ var syncCmd = &cobra.Command{
|
||||||
}
|
}
|
||||||
|
|
||||||
root := prj.Root()
|
root := prj.Root()
|
||||||
fileSet := git.NewFileSet(root)
|
fileSet := git.NewFileSet(root, syncInclude)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -61,9 +63,12 @@ var remotePath *string
|
||||||
|
|
||||||
var persistSnapshot *bool
|
var persistSnapshot *bool
|
||||||
|
|
||||||
|
var syncInclude *[]string
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
root.RootCmd.AddCommand(syncCmd)
|
root.RootCmd.AddCommand(syncCmd)
|
||||||
interval = syncCmd.Flags().Duration("interval", 1*time.Second, "project files polling interval")
|
interval = syncCmd.Flags().Duration("interval", 1*time.Second, "project files polling interval")
|
||||||
remotePath = syncCmd.Flags().String("remote-path", "", "remote path to store repo in. eg: /Repos/me@example.com/test-repo")
|
remotePath = syncCmd.Flags().String("remote-path", "", "remote path to store repo in. eg: /Repos/me@example.com/test-repo")
|
||||||
persistSnapshot = syncCmd.Flags().Bool("persist-snapshot", true, "whether to store local snapshots of sync state")
|
persistSnapshot = syncCmd.Flags().Bool("persist-snapshot", true, "whether to store local snapshots of sync state")
|
||||||
|
syncInclude = syncCmd.Flags().StringArray("sync-include", []string{}, "list of regex patterns for which files to sync. Overrides .gitignore")
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,17 +34,25 @@ func (f File) Modified() (ts time.Time) {
|
||||||
type FileSet struct {
|
type FileSet struct {
|
||||||
root string
|
root string
|
||||||
ignore *ignore.GitIgnore
|
ignore *ignore.GitIgnore
|
||||||
|
// if include is not nil, it will override ignore
|
||||||
|
include *ignore.GitIgnore
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetFileSet retrieves FileSet from Git repository checkout root
|
// GetFileSet retrieves FileSet from Git repository checkout root
|
||||||
// or panics if no root is detected.
|
// or panics if no root is detected.
|
||||||
func GetFileSet() (FileSet, error) {
|
func GetFileSet() (FileSet, error) {
|
||||||
root, err := Root()
|
root, err := Root()
|
||||||
return NewFileSet(root), err
|
return NewFileSet(root, nil), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Retuns FileSet for the repository located at `root`
|
// Retuns FileSet for the repository located at `root`
|
||||||
func NewFileSet(root string) FileSet {
|
func NewFileSet(root string, syncInclude *[]string) FileSet {
|
||||||
|
if syncInclude != nil {
|
||||||
|
return FileSet{
|
||||||
|
root: root,
|
||||||
|
include: ignore.CompileIgnoreLines(*syncInclude...),
|
||||||
|
}
|
||||||
|
}
|
||||||
lines := []string{".git", ".bricks"}
|
lines := []string{".git", ".bricks"}
|
||||||
rawIgnore, err := os.ReadFile(fmt.Sprintf("%s/.gitignore", root))
|
rawIgnore, err := os.ReadFile(fmt.Sprintf("%s/.gitignore", root))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
@ -82,9 +90,23 @@ func (w *FileSet) RecursiveListFiles(dir string) (fileList []File, err error) {
|
||||||
for len(queue) > 0 {
|
for len(queue) > 0 {
|
||||||
current := queue[0]
|
current := queue[0]
|
||||||
queue = queue[1:]
|
queue = queue[1:]
|
||||||
if w.ignore.MatchesPath(current.Relative) {
|
// If w.include is empty and the current file matches one of the
|
||||||
|
// patterns in w.ignore then we do not list the file
|
||||||
|
if w.include == nil && w.ignore.MatchesPath(current.Relative) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if w.include is not empty and current file does not match any
|
||||||
|
// patterns in w.include then we do not list the file
|
||||||
|
if w.include != nil && !w.include.MatchesPath(current.Relative) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// we list the file if one of the following holds true
|
||||||
|
// 1. w.include is empty and current file does not match any of the
|
||||||
|
// patterns in w.ignore
|
||||||
|
// 2. w.include is not empty and current file matches any one of the
|
||||||
|
// patters in w.include
|
||||||
if !current.IsDir() {
|
if !current.IsDir() {
|
||||||
fileList = append(fileList, current)
|
fileList = append(fileList, current)
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -26,7 +26,7 @@ func TestRecusiveListFile(t *testing.T) {
|
||||||
|
|
||||||
// config file is returned
|
// config file is returned
|
||||||
// .gitignore is not because we explictly ignore it in .gitignore
|
// .gitignore is not because we explictly ignore it in .gitignore
|
||||||
fileSet := NewFileSet(projectDir)
|
fileSet := NewFileSet(projectDir, nil)
|
||||||
files, err := fileSet.RecursiveListFiles(projectDir)
|
files, err := fileSet.RecursiveListFiles(projectDir)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Len(t, files, 1)
|
assert.Len(t, files, 1)
|
||||||
|
@ -63,7 +63,7 @@ func TestFileSetNonCleanRoot(t *testing.T) {
|
||||||
// Path simplification is done by most filepath functions.
|
// Path simplification is done by most filepath functions.
|
||||||
root := "./../git"
|
root := "./../git"
|
||||||
require.NotEqual(t, root, filepath.Clean(root))
|
require.NotEqual(t, root, filepath.Clean(root))
|
||||||
fs := NewFileSet(root)
|
fs := NewFileSet(root, nil)
|
||||||
files, err := fs.All()
|
files, err := fs.All()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue