@@ -18,40 +18,39 @@ public QueryCommits(string repo, string limits, bool needFindHead = true)
1818
1919 public QueryCommits ( string repo , string filter , Models . CommitSearchMethod method , bool onlyCurrentBranch )
2020 {
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 " ) ;
2226
2327 if ( method == Models . CommitSearchMethod . ByAuthor )
2428 {
25- search += $ "-i --author={ filter . Quoted ( ) } " ;
29+ builder . Append ( "-i --author=" ) . Append ( filter . Quoted ( ) ) ;
2630 }
2731 else if ( method == Models . CommitSearchMethod . ByCommitter )
2832 {
29- search += $ "-i --committer={ filter . Quoted ( ) } " ;
33+ builder . Append ( "-i --committer=" ) . Append ( filter . Quoted ( ) ) ;
3034 }
3135 else if ( method == Models . CommitSearchMethod . ByMessage )
3236 {
33- var argsBuilder = new StringBuilder ( ) ;
34- argsBuilder . Append ( search ) ;
35-
3637 var words = filter . Split ( [ ' ' , '\t ' , '\r ' ] , StringSplitOptions . RemoveEmptyEntries ) ;
3738 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" ) ;
4241 }
4342 else if ( method == Models . CommitSearchMethod . ByPath )
4443 {
45- search += $ "-- { filter . Quoted ( ) } " ;
44+ builder . Append ( "-- " ) . Append ( filter . Quoted ( ) ) ;
4645 }
4746 else
4847 {
49- search = $ "-G{ filter . Quoted ( ) } " ;
48+ builder . Append ( "-G" ) . Append ( filter . Quoted ( ) ) ;
5049 }
5150
5251 WorkingDirectory = repo ;
5352 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 ( ) ;
5554 _findFirstMerged = false ;
5655 }
5756
@@ -87,7 +86,20 @@ public QueryCommits(string repo, string filter, Models.CommitSearchMethod method
8786 await proc . WaitForExitAsync ( ) . ConfigureAwait ( false ) ;
8887
8988 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+ }
91103 }
92104 catch ( Exception e )
93105 {
@@ -97,27 +109,6 @@ public QueryCommits(string repo, string filter, Models.CommitSearchMethod method
97109 return commits ;
98110 }
99111
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-
121112 private bool _findFirstMerged = false ;
122113 private bool _isHeadFound = false ;
123114 }
0 commit comments