From 68ef0dfe6c9b10a0b64f9cb5722b891e85b271ad Mon Sep 17 00:00:00 2001 From: dan9186 Date: Fri, 21 Nov 2025 10:15:07 -0800 Subject: [PATCH 1/3] make space for more diff configs that aren't git flags --- client/clienter.go | 2 +- client/repos_diff.go | 11 ++++++++--- client/testclient/client.go | 2 +- cmd/diff.go | 8 +++++++- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/client/clienter.go b/client/clienter.go index 4393071..ddbc491 100644 --- a/client/clienter.go +++ b/client/clienter.go @@ -11,7 +11,7 @@ type Clienter interface { Branches(ctx context.Context, repoDirs []string, args ...string) error CheckoutRepos(ctx context.Context, repoDirs []string, args ...string) error CloneRepos(ctx context.Context, dir string) ([]*Repository, error) - DiffRepos(ctx context.Context, repoDirs []string, ignoreEmtpy bool, args ...string) error + DiffRepos(ctx context.Context, repoDirs []string, cfg *DiffConfig) error GetDirs(ctx context.Context, dir string) ([]string, error) GetLogins(ctx context.Context) ([]string, error) GetRepos(ctx context.Context, name string) ([]*github.Repository, error) diff --git a/client/repos_diff.go b/client/repos_diff.go index e1da72a..047f68b 100644 --- a/client/repos_diff.go +++ b/client/repos_diff.go @@ -8,8 +8,13 @@ import ( "strings" ) -func (c *Client) DiffRepos(ctx context.Context, dirs []string, ignoreEmtpy bool, args ...string) error { - args = append([]string{"diff"}, args...) +type DiffConfig struct { + IgnoreEmpty bool + Args []string +} + +func (c *Client) DiffRepos(ctx context.Context, dirs []string, cfg *DiffConfig) error { + args := append([]string{"diff"}, cfg.Args...) c.scrb.BeginDescribe("Command") defer c.scrb.EndDescribe() @@ -30,7 +35,7 @@ func (c *Client) DiffRepos(ctx context.Context, dirs []string, ignoreEmtpy bool, err := cmd.Run() - if ignoreEmtpy && out.Len() == 0 && err == nil { + if cfg.IgnoreEmpty && out.Len() == 0 && err == nil { continue } diff --git a/client/testclient/client.go b/client/testclient/client.go index dc8d9a8..6757a47 100644 --- a/client/testclient/client.go +++ b/client/testclient/client.go @@ -99,7 +99,7 @@ func (c *TestClient) TagRepos(ctx context.Context, repoDirs []string, args ...st return nil } -func (c *TestClient) DiffRepos(ctx context.Context, repoDirs []string, ignoreEmtpy bool, args ...string) error { +func (c *TestClient) DiffRepos(ctx context.Context, repoDirs []string, cfg *client.DiffConfig) error { c.CommandsCalled = append(c.CommandsCalled, "DiffRepos") return nil diff --git a/cmd/diff.go b/cmd/diff.go index 453b44d..e8ae003 100644 --- a/cmd/diff.go +++ b/cmd/diff.go @@ -4,6 +4,7 @@ import ( "context" "fmt" + "github.com/gomicro/align/client" "github.com/spf13/cobra" ) @@ -52,7 +53,12 @@ func diffFunc(cmd *cobra.Command, args []string) error { args = append(args, "--name-only") } - err = clt.DiffRepos(ctx, repoDirs, ignoreEmtpy, args...) + cfg := &client.DiffConfig{ + IgnoreEmpty: ignoreEmtpy, + Args: args, + } + + err = clt.DiffRepos(ctx, repoDirs, cfg) if err != nil { cmd.SilenceUsage = true return fmt.Errorf("diff repos: %w", err) From 604b04915641b2b4da451d59260c79ef67901f12 Mon Sep 17 00:00:00 2001 From: dan9186 Date: Fri, 21 Nov 2025 10:16:03 -0800 Subject: [PATCH 2/3] add flag and config for ignoring files with a prefix --- client/repos_diff.go | 1 + cmd/diff.go | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/client/repos_diff.go b/client/repos_diff.go index 047f68b..b4f7801 100644 --- a/client/repos_diff.go +++ b/client/repos_diff.go @@ -10,6 +10,7 @@ import ( type DiffConfig struct { IgnoreEmpty bool + IgnoreFilePrefix []string Args []string } diff --git a/cmd/diff.go b/cmd/diff.go index e8ae003..85384b5 100644 --- a/cmd/diff.go +++ b/cmd/diff.go @@ -9,9 +9,10 @@ import ( ) var ( - short bool - nameOnly bool - ignoreEmtpy bool + short bool + nameOnly bool + ignoreEmtpy bool + ignoreFilePrefix []string ) func init() { @@ -20,11 +21,13 @@ func init() { diffCmd.Flags().StringVar(&dir, "dir", ".", "directory to diff repos from") diffCmd.Flags().BoolVar(&ignoreEmtpy, "ignore-empty", false, "ignore empty diffs") + diffCmd.Flags().StringArrayVar(&ignoreFilePrefix, "ignore-file-prefix", []string{}, "ignore files in diffs with the given prefix") diffCmd.Flags().BoolVar(&short, "shortstat", false, "show only the number of changed files, insertions, and deletions") diffCmd.Flags().BoolVar(&nameOnly, "name-only", false, "show only names of changed files") diffCmd.MarkFlagsMutuallyExclusive("shortstat", "name-only") + diffCmd.MarkFlagsMutuallyExclusive("shortstat", "ignore-file-prefix") } var diffCmd = &cobra.Command{ @@ -55,6 +58,7 @@ func diffFunc(cmd *cobra.Command, args []string) error { cfg := &client.DiffConfig{ IgnoreEmpty: ignoreEmtpy, + IgnoreFilePrefix: ignoreFilePrefix, Args: args, } From 9c8f8a1492cfd88c13925dcc764ab3b63af85ffc Mon Sep 17 00:00:00 2001 From: dan9186 Date: Fri, 21 Nov 2025 10:36:40 -0800 Subject: [PATCH 3/3] do the filtering of lines --- client/repos_diff.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/client/repos_diff.go b/client/repos_diff.go index b4f7801..935d5a1 100644 --- a/client/repos_diff.go +++ b/client/repos_diff.go @@ -1,6 +1,7 @@ package client import ( + "bufio" "bytes" "context" "fmt" @@ -36,6 +37,9 @@ func (c *Client) DiffRepos(ctx context.Context, dirs []string, cfg *DiffConfig) err := cmd.Run() + // filter first to have empty check accurate + out = filterLines(out, cfg.IgnoreFilePrefix) + if cfg.IgnoreEmpty && out.Len() == 0 && err == nil { continue } @@ -53,3 +57,30 @@ func (c *Client) DiffRepos(ctx context.Context, dirs []string, cfg *DiffConfig) return nil } + +func filterLines(buf *bytes.Buffer, prefixes []string) *bytes.Buffer { + if len(prefixes) == 0 { + return buf + } + + scanner := bufio.NewScanner(buf) + out := &bytes.Buffer{} + + for scanner.Scan() { + line := scanner.Text() + + ignore := false + for _, prefix := range prefixes { + if strings.HasPrefix(line, prefix) { + ignore = true + break + } + } + + if !ignore { + out.WriteString(line + "\n") + } + } + + return out +}