Skip to content

Commit 307e647

Browse files
authored
sd log status: in merging (#40)
# Conflicts: # gitutil/gh_util.go # interactive/log_status.go
1 parent da9eb5c commit 307e647

3 files changed

Lines changed: 50 additions & 18 deletions

File tree

commands/command_log_test.go

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ func TestSdLog_WhenPollFlag_PollsAndQuitsOnInput(t *testing.T) {
173173
"abc123def456abc123def456abc123def456abc123",
174174
nil, "git", "log", util.MatchAnyRemainingArgs)
175175
testExecutor.SetResponse(
176-
"check,COMPLETED,SUCCESS,SUCCESS\nstate,OPEN\nreviewRequestCount,0\nmergeStateStatus,CLEAN\nisDraft,false",
176+
"check,COMPLETED,SUCCESS,SUCCESS\nstate,OPEN\nreviewRequestCount,0\nmergeStateStatus,CLEAN\nisDraft,false\nautoMerge,false",
177177
nil, "gh", "pr", "view", util.MatchAnyRemainingArgs)
178178

179179
out := util.NewWriteRecorder(new(bytes.Buffer))
@@ -220,7 +220,7 @@ func TestSdLog_WhenStatusFlag_ShowsStatusInfo(t *testing.T) {
220220
"abc123def456abc123def456abc123def456abc123",
221221
nil, "git", "log", util.MatchAnyRemainingArgs)
222222
testExecutor.SetResponse(
223-
"check,COMPLETED,SUCCESS,SUCCESS\nstate,OPEN\nreviewRequestCount,1\nlatestReview,someuser,APPROVED,4,0\nmergeStateStatus,CLEAN\nisDraft,false",
223+
"check,COMPLETED,SUCCESS,SUCCESS\nstate,OPEN\nreviewRequestCount,1\nlatestReview,someuser,APPROVED,4,0\nmergeStateStatus,CLEAN\nisDraft,false\nautoMerge,false",
224224
nil, "gh", "pr", "view", util.MatchAnyRemainingArgs)
225225

226226
out := testParseArguments("log", "--status")
@@ -243,7 +243,7 @@ func TestSdLog_WhenStatusFlag_ShowsChangesRequested(t *testing.T) {
243243
"abc123def456abc123def456abc123def456abc123",
244244
nil, "git", "log", util.MatchAnyRemainingArgs)
245245
testExecutor.SetResponse(
246-
"check,COMPLETED,SUCCESS,SUCCESS\nstate,OPEN\nreviewRequestCount,1\nlatestReview,alice,CHANGES_REQUESTED,0,0\nlatestReview,bob,APPROVED,50,0\nmergeStateStatus,BLOCKED\nisDraft,false",
246+
"check,COMPLETED,SUCCESS,SUCCESS\nstate,OPEN\nreviewRequestCount,1\nlatestReview,alice,CHANGES_REQUESTED,0,0\nlatestReview,bob,APPROVED,50,0\nmergeStateStatus,BLOCKED\nisDraft,false\nautoMerge,false",
247247
nil, "gh", "pr", "view", util.MatchAnyRemainingArgs)
248248

249249
out := testParseArguments("log", "--status")
@@ -265,7 +265,7 @@ func TestSdLog_WhenStatusFlag_CombinesUsersWithSameStatus(t *testing.T) {
265265
"abc123def456abc123def456abc123def456abc123",
266266
nil, "git", "log", util.MatchAnyRemainingArgs)
267267
testExecutor.SetResponse(
268-
"check,COMPLETED,SUCCESS,SUCCESS\nstate,OPEN\nreviewRequestCount,0\nlatestReview,alice,CHANGES_REQUESTED,0,0\nlatestReview,bob,CHANGES_REQUESTED,0,0\nlatestReview,carol,APPROVED,0,0\nlatestReview,dave,APPROVED,0,0\nmergeStateStatus,BLOCKED\nisDraft,false",
268+
"check,COMPLETED,SUCCESS,SUCCESS\nstate,OPEN\nreviewRequestCount,0\nlatestReview,alice,CHANGES_REQUESTED,0,0\nlatestReview,bob,CHANGES_REQUESTED,0,0\nlatestReview,carol,APPROVED,0,0\nlatestReview,dave,APPROVED,0,0\nmergeStateStatus,BLOCKED\nisDraft,false\nautoMerge,false",
269269
nil, "gh", "pr", "view", util.MatchAnyRemainingArgs)
270270

271271
out := testParseArguments("log", "--status")
@@ -287,7 +287,7 @@ func TestSdLog_WhenStatusFlag_ShowsMergedStatus(t *testing.T) {
287287
"abc123def456abc123def456abc123def456abc123",
288288
nil, "git", "log", util.MatchAnyRemainingArgs)
289289
testExecutor.SetResponse(
290-
"check,COMPLETED,SUCCESS,SUCCESS\nstate,MERGED\nreviewRequestCount,0\nlatestReview,someuser,APPROVED,4,0\nmergeStateStatus,CLEAN\nisDraft,false",
290+
"check,COMPLETED,SUCCESS,SUCCESS\nstate,MERGED\nreviewRequestCount,0\nlatestReview,someuser,APPROVED,4,0\nmergeStateStatus,CLEAN\nisDraft,false\nautoMerge,false",
291291
nil, "gh", "pr", "view", util.MatchAnyRemainingArgs)
292292

293293
out := testParseArguments("log", "--status")
@@ -296,6 +296,27 @@ func TestSdLog_WhenStatusFlag_ShowsMergedStatus(t *testing.T) {
296296
assert.Contains(out, "[checks: passed")
297297
}
298298

299+
func TestSdLog_WhenStatusFlag_ShowsMergingStatus(t *testing.T) {
300+
assert := assert.New(t)
301+
testExecutor := testutil.InitTest(t, slog.LevelError)
302+
303+
testutil.AddCommit("first", "")
304+
testParseArguments("new", "1")
305+
306+
testExecutor.SetResponse(
307+
"abc123def456abc123def456abc123def456abc123",
308+
nil, "git", "log", util.MatchAnyRemainingArgs)
309+
testExecutor.SetResponse(
310+
"check,COMPLETED,SUCCESS,SUCCESS\nstate,OPEN\nreviewRequestCount,0\nlatestReview,someuser,APPROVED,4,0\nmergeStateStatus,CLEAN\nisDraft,false\nautoMerge,true",
311+
nil, "gh", "pr", "view", util.MatchAnyRemainingArgs)
312+
313+
out := testParseArguments("log", "--status")
314+
315+
assert.Contains(out, "[merging]")
316+
assert.NotContains(out, "[open]")
317+
assert.NotContains(out, "[merged]")
318+
}
319+
299320
func TestSdLog_WhenStatusFlagAndNoPRs_PrintsCommitsWithoutBubbletea(t *testing.T) {
300321
assert := assert.New(t)
301322
testutil.InitTest(t, slog.LevelError)
@@ -321,7 +342,7 @@ func TestSdLog_WhenStatusFlag_ShowsDraftStatus(t *testing.T) {
321342
"abc123def456abc123def456abc123def456abc123",
322343
nil, "git", "log", util.MatchAnyRemainingArgs)
323344
testExecutor.SetResponse(
324-
"state,OPEN\nreviewRequestCount,0\nmergeStateStatus,BLOCKED\nisDraft,true",
345+
"state,OPEN\nreviewRequestCount,0\nmergeStateStatus,BLOCKED\nisDraft,true\nautoMerge,false",
325346
nil, "gh", "pr", "view", util.MatchAnyRemainingArgs)
326347

327348
out := testParseArguments("log", "--status")

gitutil/gh_util.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ type PullRequestStatus struct {
4747
LatestReviews []LatestReview
4848
CanMerge bool
4949
IsDraft bool
50+
IsInMergeQueue bool
5051
}
5152

5253
/*
@@ -149,9 +150,10 @@ func GetPullRequestStatus(branchName string, minChecks int) PullRequestStatus {
149150
"(\"reviewRequestCount,\" + (.reviewRequests | length | tostring))," +
150151
"(.latestReviews[] | \"latestReview,\" + .author.login + \",\" + .state + \",\" + (.body | length | tostring) + \",\" + ((.comments // []) | length | tostring))," +
151152
"(\"mergeStateStatus,\" + .mergeStateStatus)," +
152-
"(\"isDraft,\" + (if .isDraft then \"true\" else \"false\" end))"
153+
"(\"isDraft,\" + (if .isDraft then \"true\" else \"false\" end))," +
154+
"(\"autoMerge,\" + (if .autoMergeRequest != null then \"true\" else \"false\" end))"
153155
out := util.ExecuteOrDie(util.ExecuteOptions{Retries: GhRetries},
154-
"gh", "pr", "view", branchName, "--json", "state,statusCheckRollup,latestReviews,reviewRequests,mergeStateStatus,isDraft", "--jq", jq)
156+
"gh", "pr", "view", branchName, "--json", "state,statusCheckRollup,latestReviews,reviewRequests,mergeStateStatus,isDraft,autoMergeRequest", "--jq", jq)
155157
lines := strings.Split(strings.TrimSpace(out), "\n")
156158
status := PullRequestStatus{Checks: PullRequestChecksStatus{MinChecks: minChecks}}
157159
for _, line := range lines {
@@ -201,6 +203,8 @@ func GetPullRequestStatus(branchName string, minChecks int) PullRequestStatus {
201203
status.CanMerge = fields[1] == "CLEAN"
202204
case "isDraft":
203205
status.IsDraft = fields[1] == "true"
206+
case "autoMerge":
207+
status.IsInMergeQueue = fields[1] == "true"
204208
default:
205209
slog.Warn(fmt.Sprint("unexpected key in pr view output: ", fields[0]))
206210
}

interactive/log_status.go

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,9 @@ func (m logStatusModel) hasInlineSpinner() bool {
180180

181181
func coloredCommit(row logStatusRow) string {
182182
if row.status != nil {
183+
if row.status.IsInMergeQueue {
184+
return color.YellowString(row.log.Commit)
185+
}
183186
switch row.status.State {
184187
case gitutil.PullRequestStateMerged:
185188
return purpleColor.Sprint(row.log.Commit)
@@ -200,17 +203,21 @@ func (m logStatusModel) formatStatus(status *gitutil.PullRequestStatus) string {
200203
return m.spinner.View()
201204
}
202205
var parts []string
203-
switch status.State {
204-
case gitutil.PullRequestStateOpen:
205-
if status.IsDraft {
206-
parts = append(parts, grayColor.Sprint("[draft]"))
207-
} else {
208-
parts = append(parts, color.CyanString("[open]"))
206+
if status.IsInMergeQueue {
207+
parts = append(parts, color.YellowString("[merging]"))
208+
} else {
209+
switch status.State {
210+
case gitutil.PullRequestStateOpen:
211+
if status.IsDraft {
212+
parts = append(parts, grayColor.Sprint("[draft]"))
213+
} else {
214+
parts = append(parts, color.CyanString("[open]"))
215+
}
216+
case gitutil.PullRequestStateMerged:
217+
parts = append(parts, purpleColor.Sprint("[merged]"))
218+
case gitutil.PullRequestStateClosed:
219+
parts = append(parts, color.RedString("[closed]"))
209220
}
210-
case gitutil.PullRequestStateMerged:
211-
parts = append(parts, purpleColor.Sprint("[merged]"))
212-
case gitutil.PullRequestStateClosed:
213-
parts = append(parts, color.RedString("[closed]"))
214221
}
215222
checks := status.Checks
216223
total := checks.Total()

0 commit comments

Comments
 (0)