@@ -65,94 +65,106 @@ public int GetNumberOfUncommittedChanges()
65
65
{
66
66
return new OperationWithExponentialBackoff < LibGit2Sharp . LockedFileException , int > ( new ThreadSleep ( ) , log , ( ) =>
67
67
{
68
- // check if we have a branch tip at all to behave properly with empty repos
69
- // => return that we have actually uncomitted changes because we are apparently
70
- // running GitVersion on something which lives inside this brand new repo _/\Ö/\_
71
- if ( repositoryInstance . Head ? . Tip == null || repositoryInstance . Diff == null )
68
+ return GetNumberOfUncommittedChangesInternal ( ) ;
69
+ } ) . ExecuteAsync ( ) . Result ;
70
+ }
71
+
72
+ private int GetNumberOfUncommittedChangesInternal ( )
73
+ {
74
+ // check if we have a branch tip at all to behave properly with empty repos
75
+ // => return that we have actually uncomitted changes because we are apparently
76
+ // running GitVersion on something which lives inside this brand new repo _/\Ö/\_
77
+ if ( repositoryInstance . Head ? . Tip == null || repositoryInstance . Diff == null )
78
+ {
79
+ // this is a somewhat cumbersome way of figuring out the number of changes in the repo
80
+ // which is more expensive than to use the Diff as it gathers more info, but
81
+ // we can't use the other method when we are dealing with a new/empty repo
82
+ try
72
83
{
73
- // this is a somewhat cumbersome way of figuring out the number of changes in the repo
74
- // which is more expensive than to use the Diff as it gathers more info, but
75
- // we can't use the other method when we are dealing with a new/empty repo
76
- try
77
- {
78
- var status = repositoryInstance . RetrieveStatus ( ) ;
79
- return status . Untracked . Count ( ) + status . Staged . Count ( ) ;
80
- }
81
- catch ( Exception )
82
- {
83
- return int . MaxValue ; // this should be somewhat puzzling to see,
84
- // so we may have reached our goal to show that
85
- // that repo is really "Dirty"...
86
- }
84
+ var status = repositoryInstance . RetrieveStatus ( ) ;
85
+ return status . Untracked . Count ( ) + status . Staged . Count ( ) ;
87
86
}
87
+ catch ( Exception )
88
+ {
89
+ return int . MaxValue ; // this should be somewhat puzzling to see,
90
+ // so we may have reached our goal to show that
91
+ // that repo is really "Dirty"...
92
+ }
93
+ }
88
94
89
- // gets all changes of the last commit vs Staging area and WT
90
- var changes = repositoryInstance . Diff . Compare < TreeChanges > ( repositoryInstance . Head . Tip . Tree ,
91
- DiffTargets . Index | DiffTargets . WorkingDirectory ) ;
95
+ // gets all changes of the last commit vs Staging area and WT
96
+ var changes = repositoryInstance . Diff . Compare < TreeChanges > ( repositoryInstance . Head . Tip . Tree ,
97
+ DiffTargets . Index | DiffTargets . WorkingDirectory ) ;
92
98
93
- return changes . Count ;
94
- } ) . ExecuteAsync ( ) . Result ;
99
+ return changes . Count ;
95
100
}
101
+
96
102
public void CreateBranchForPullRequestBranch ( AuthenticationInfo auth )
97
103
{
98
104
new OperationWithExponentialBackoff < LockedFileException > ( new ThreadSleep ( ) , log , ( ) =>
99
105
{
100
- var network = repositoryInstance . Network ;
101
- var remote = network . Remotes . Single ( ) ;
106
+ CreateBranchForPullRequestBranchInternal ( auth ) ;
107
+ } ) . ExecuteAsync ( ) . Wait ( ) ;
108
+ }
102
109
103
- log . Info ( "Fetching remote refs to see if there is a pull request ref" ) ;
104
- var credentialsProvider = GetCredentialsProvider ( auth ) ;
105
- var remoteTips = ( credentialsProvider != null
106
- ? network . ListReferences ( remote , credentialsProvider )
107
- : network . ListReferences ( remote ) )
108
- . Select ( r => r . ResolveToDirectReference ( ) ) . ToList ( ) ;
110
+ private void CreateBranchForPullRequestBranchInternal ( AuthenticationInfo auth )
111
+ {
112
+ var network = repositoryInstance . Network ;
113
+ var remote = network . Remotes . Single ( ) ;
109
114
110
- log . Info ( $ "Remote Refs:{ System . Environment . NewLine } " + string . Join ( System . Environment . NewLine , remoteTips . Select ( r => r . CanonicalName ) ) ) ;
115
+ log . Info ( "Fetching remote refs to see if there is a pull request ref" ) ;
116
+ var credentialsProvider = GetCredentialsProvider ( auth ) ;
117
+ var remoteTips = ( credentialsProvider != null
118
+ ? network . ListReferences ( remote , credentialsProvider )
119
+ : network . ListReferences ( remote ) )
120
+ . Select ( r => r . ResolveToDirectReference ( ) ) . ToList ( ) ;
111
121
112
- var headTipSha = Head . Tip ? . Sha ;
122
+ log . Info ( $ "Remote Refs: { System . Environment . NewLine } " + string . Join ( System . Environment . NewLine , remoteTips . Select ( r => r . CanonicalName ) ) ) ;
113
123
114
- var refs = remoteTips . Where ( r => r . TargetIdentifier == headTipSha ) . ToList ( ) ;
124
+ var headTipSha = Head . Tip ? . Sha ;
115
125
116
- if ( refs . Count == 0 )
117
- {
118
- var message = $ "Couldn't find any remote tips from remote '{ remote . Url } ' pointing at the commit '{ headTipSha } '.";
119
- throw new WarningException ( message ) ;
120
- }
126
+ var refs = remoteTips . Where ( r => r . TargetIdentifier == headTipSha ) . ToList ( ) ;
121
127
122
- if ( refs . Count > 1 )
123
- {
124
- var names = string . Join ( ", " , refs . Select ( r => r . CanonicalName ) ) ;
125
- var message = $ "Found more than one remote tip from remote '{ remote . Url } ' pointing at the commit '{ headTipSha } '. Unable to determine which one to use ({ names } ).";
126
- throw new WarningException ( message ) ;
127
- }
128
+ if ( refs . Count == 0 )
129
+ {
130
+ var message = $ "Couldn't find any remote tips from remote '{ remote . Url } ' pointing at the commit '{ headTipSha } '.";
131
+ throw new WarningException ( message ) ;
132
+ }
128
133
129
- var reference = refs . First ( ) ;
130
- var canonicalName = reference . CanonicalName ;
131
- var referenceName = ReferenceName . Parse ( reference . CanonicalName ) ;
132
- log . Info ( $ "Found remote tip '{ canonicalName } ' pointing at the commit '{ headTipSha } '.") ;
134
+ if ( refs . Count > 1 )
135
+ {
136
+ var names = string . Join ( ", " , refs . Select ( r => r . CanonicalName ) ) ;
137
+ var message = $ "Found more than one remote tip from remote '{ remote . Url } ' pointing at the commit '{ headTipSha } '. Unable to determine which one to use ({ names } ).";
138
+ throw new WarningException ( message ) ;
139
+ }
133
140
134
- if ( referenceName . IsTag )
135
- {
136
- log . Info ( $ "Checking out tag '{ canonicalName } '") ;
137
- Checkout ( reference . Target . Sha ) ;
138
- }
139
- else if ( referenceName . IsPullRequest )
140
- {
141
- var fakeBranchName = canonicalName . Replace ( "refs/pull/" , "refs/heads/pull/" ) . Replace ( "refs/pull-requests/" , "refs/heads/pull-requests/" ) ;
141
+ var reference = refs . First ( ) ;
142
+ var canonicalName = reference . CanonicalName ;
143
+ var referenceName = ReferenceName . Parse ( reference . CanonicalName ) ;
144
+ log . Info ( $ "Found remote tip '{ canonicalName } ' pointing at the commit '{ headTipSha } '.") ;
145
+
146
+ if ( referenceName . IsTag )
147
+ {
148
+ log . Info ( $ "Checking out tag '{ canonicalName } '") ;
149
+ Checkout ( reference . Target . Sha ) ;
150
+ }
151
+ else if ( referenceName . IsPullRequest )
152
+ {
153
+ var fakeBranchName = canonicalName . Replace ( "refs/pull/" , "refs/heads/pull/" ) . Replace ( "refs/pull-requests/" , "refs/heads/pull-requests/" ) ;
142
154
143
- log . Info ( $ "Creating fake local branch '{ fakeBranchName } '.") ;
144
- Refs . Add ( fakeBranchName , headTipSha ) ;
155
+ log . Info ( $ "Creating fake local branch '{ fakeBranchName } '.") ;
156
+ Refs . Add ( fakeBranchName , headTipSha ) ;
145
157
146
- log . Info ( $ "Checking local branch '{ fakeBranchName } ' out.") ;
147
- Checkout ( fakeBranchName ) ;
148
- }
149
- else
150
- {
151
- var message = $ "Remote tip '{ canonicalName } ' from remote '{ remote . Url } ' doesn't look like a valid pull request.";
152
- throw new WarningException ( message ) ;
153
- }
154
- } ) . ExecuteAsync ( ) . Wait ( ) ;
158
+ log . Info ( $ "Checking local branch '{ fakeBranchName } ' out.") ;
159
+ Checkout ( fakeBranchName ) ;
160
+ }
161
+ else
162
+ {
163
+ var message = $ "Remote tip '{ canonicalName } ' from remote '{ remote . Url } ' doesn't look like a valid pull request.";
164
+ throw new WarningException ( message ) ;
165
+ }
155
166
}
167
+
156
168
public void Clone ( string sourceUrl , string workdirPath , AuthenticationInfo auth )
157
169
{
158
170
try
0 commit comments