@@ -18,40 +18,39 @@ public QueryCommits(string repo, string limits, bool needFindHead = true)
18
18
19
19
public QueryCommits ( string repo , string filter , Models . CommitSearchMethod method , bool onlyCurrentBranch )
20
20
{
21
- string search = onlyCurrentBranch ? string . Empty : "--branches --remotes " ;
21
+ var builder = new StringBuilder ( ) ;
22
+ builder . Append ( "log -1000 --date-order --no-show-signature --decorate=full --format=%H%x00%P%x00%D%x00%aN±%aE%x00%at%x00%cN±%cE%x00%ct%x00%s " ) ;
23
+
24
+ if ( ! onlyCurrentBranch )
25
+ builder . Append ( "--branches --remotes " ) ;
22
26
23
27
if ( method == Models . CommitSearchMethod . ByAuthor )
24
28
{
25
- search += $ "-i --author={ filter . Quoted ( ) } " ;
29
+ builder . Append ( "-i --author=" ) . Append ( filter . Quoted ( ) ) ;
26
30
}
27
31
else if ( method == Models . CommitSearchMethod . ByCommitter )
28
32
{
29
- search += $ "-i --committer={ filter . Quoted ( ) } " ;
33
+ builder . Append ( "-i --committer=" ) . Append ( filter . Quoted ( ) ) ;
30
34
}
31
35
else if ( method == Models . CommitSearchMethod . ByMessage )
32
36
{
33
- var argsBuilder = new StringBuilder ( ) ;
34
- argsBuilder . Append ( search ) ;
35
-
36
37
var words = filter . Split ( [ ' ' , '\t ' , '\r ' ] , StringSplitOptions . RemoveEmptyEntries ) ;
37
38
foreach ( var word in words )
38
- argsBuilder . Append ( "--grep=" ) . Append ( word . Trim ( ) . Quoted ( ) ) . Append ( ' ' ) ;
39
- argsBuilder . Append ( "--all-match -i" ) ;
40
-
41
- search = argsBuilder . ToString ( ) ;
39
+ builder . Append ( "--grep=" ) . Append ( word . Trim ( ) . Quoted ( ) ) . Append ( ' ' ) ;
40
+ builder . Append ( "--all-match -i" ) ;
42
41
}
43
42
else if ( method == Models . CommitSearchMethod . ByPath )
44
43
{
45
- search += $ "-- { filter . Quoted ( ) } " ;
44
+ builder . Append ( "-- " ) . Append ( filter . Quoted ( ) ) ;
46
45
}
47
46
else
48
47
{
49
- search = $ "-G{ filter . Quoted ( ) } " ;
48
+ builder . Append ( "-G" ) . Append ( filter . Quoted ( ) ) ;
50
49
}
51
50
52
51
WorkingDirectory = repo ;
53
52
Context = repo ;
54
- Args = $ "log -1000 --date-order --no-show-signature --decorate=full --format=%H%x00%P%x00%D%x00%aN±%aE%x00%at%x00%cN±%cE%x00%ct%x00%s { search } " ;
53
+ Args = builder . ToString ( ) ;
55
54
_findFirstMerged = false ;
56
55
}
57
56
@@ -87,7 +86,20 @@ public QueryCommits(string repo, string filter, Models.CommitSearchMethod method
87
86
await proc . WaitForExitAsync ( ) . ConfigureAwait ( false ) ;
88
87
89
88
if ( _findFirstMerged && ! _isHeadFound && commits . Count > 0 )
90
- await MarkFirstMergedAsync ( commits ) . ConfigureAwait ( false ) ;
89
+ {
90
+ var set = await new QueryCurrentBranchCommitHashes ( WorkingDirectory , commits [ ^ 1 ] . CommitterTime )
91
+ . GetResultAsync ( )
92
+ . ConfigureAwait ( false ) ;
93
+
94
+ foreach ( var c in commits )
95
+ {
96
+ if ( set . Contains ( c . SHA ) )
97
+ {
98
+ c . IsMerged = true ;
99
+ break ;
100
+ }
101
+ }
102
+ }
91
103
}
92
104
catch ( Exception e )
93
105
{
@@ -97,27 +109,6 @@ public QueryCommits(string repo, string filter, Models.CommitSearchMethod method
97
109
return commits ;
98
110
}
99
111
100
- private async Task MarkFirstMergedAsync ( List < Models . Commit > commits )
101
- {
102
- Args = $ "log --since={ commits [ ^ 1 ] . CommitterTimeStr . Quoted ( ) } --format=\" %H\" ";
103
-
104
- var rs = await ReadToEndAsync ( ) . ConfigureAwait ( false ) ;
105
- var shas = rs . StdOut . Split ( [ '\r ' , '\n ' ] , StringSplitOptions . RemoveEmptyEntries ) ;
106
- if ( shas . Length == 0 )
107
- return ;
108
-
109
- var set = new HashSet < string > ( shas ) ;
110
-
111
- foreach ( var c in commits )
112
- {
113
- if ( set . Contains ( c . SHA ) )
114
- {
115
- c . IsMerged = true ;
116
- break ;
117
- }
118
- }
119
- }
120
-
121
112
private bool _findFirstMerged = false ;
122
113
private bool _isHeadFound = false ;
123
114
}
0 commit comments