Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 24 additions & 20 deletions internal/git/collect.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,26 +17,28 @@ type Remote struct {
}

type RepoInfo struct {
Path string `json:"path,omitempty"`
Name string `json:"name"`
Branch string `json:"branch"`
Ahead int `json:"ahead,omitempty"`
Behind int `json:"behind,omitempty"`
NoUpstream bool `json:"no_upstream,omitempty"`
Staged int `json:"staged,omitempty"`
Modified int `json:"modified,omitempty"`
Untracked int `json:"untracked,omitempty"`
StagedFiles []string `json:"staged_files,omitempty"`
StashCount int `json:"stash_count,omitempty"`
LastTS int64 `json:"last_ts,omitempty"`
LastRel string `json:"last_rel,omitempty"`
LastMsg string `json:"last_msg,omitempty"`
RemoteURL string `json:"remote_url,omitempty"`
Remotes []Remote `json:"remotes,omitempty"`
PRNumber int `json:"pr_number,omitempty"`
PRUrl string `json:"pr_url,omitempty"`
PRState string `json:"pr_state,omitempty"`
Error string `json:"error,omitempty"`
Path string `json:"path,omitempty"`
Name string `json:"name"`
Branch string `json:"branch"`
Ahead int `json:"ahead,omitempty"`
Behind int `json:"behind,omitempty"`
NoUpstream bool `json:"no_upstream,omitempty"`
Staged int `json:"staged,omitempty"`
Modified int `json:"modified,omitempty"`
Untracked int `json:"untracked,omitempty"`
StagedFiles []string `json:"staged_files,omitempty"`
ModifiedFiles []string `json:"modified_files,omitempty"`
UntrackedFiles []string `json:"untracked_files,omitempty"`
StashCount int `json:"stash_count,omitempty"`
LastTS int64 `json:"last_ts,omitempty"`
LastRel string `json:"last_rel,omitempty"`
LastMsg string `json:"last_msg,omitempty"`
RemoteURL string `json:"remote_url,omitempty"`
Remotes []Remote `json:"remotes,omitempty"`
PRNumber int `json:"pr_number,omitempty"`
PRUrl string `json:"pr_url,omitempty"`
PRState string `json:"pr_state,omitempty"`
Error string `json:"error,omitempty"`
}

func RunCmd(args []string, cwd string, timeout time.Duration) (stdout, stderr string, code int) {
Expand Down Expand Up @@ -97,13 +99,15 @@ func CollectRepo(path string, doFetch bool) RepoInfo {
xy := line[:2]
if xy == "??" {
info.Untracked++
info.UntrackedFiles = append(info.UntrackedFiles, strings.TrimSpace(line[2:]))
} else {
if xy[0] != ' ' && xy[0] != '?' {
info.Staged++
info.StagedFiles = append(info.StagedFiles, strings.TrimSpace(line[2:]))
}
if xy[1] != ' ' && xy[1] != '?' {
info.Modified++
info.ModifiedFiles = append(info.ModifiedFiles, strings.TrimSpace(line[2:]))
}
}
}
Expand Down
16 changes: 16 additions & 0 deletions internal/ui/tui/view.go
Original file line number Diff line number Diff line change
Expand Up @@ -882,6 +882,22 @@ func (m model) renderDetailContent() string {
b.WriteString(attentionStyle.Render(" "+f) + "\n")
}
}
if len(r.ModifiedFiles) > 0 {
b.WriteString("\n")
b.WriteString(boldStyle.Render(" Modified files") + "\n")
b.WriteString(" " + strings.Repeat("─", max(0, m.width-4)) + "\n")
for _, f := range r.ModifiedFiles {
b.WriteString(attentionStyle.Render(" "+f) + "\n")
}
}
if len(r.UntrackedFiles) > 0 {
b.WriteString("\n")
b.WriteString(boldStyle.Render(" Untracked files") + "\n")
b.WriteString(" " + strings.Repeat("─", max(0, m.width-4)) + "\n")
for _, f := range r.UntrackedFiles {
b.WriteString(pushStyle.Render(" "+f) + "\n")
}
}
if r.StashCount > 0 {
b.WriteString(field("Stash", fmt.Sprintf("%d changeset(s)", r.StashCount)))
}
Expand Down
Loading