@@ -116,9 +116,15 @@ internal static SmartSubtransportRegistration<T> RegisterDefaultSmartSubtranspor
116
116
throw new Exception ( string . Format ( "A default subtransport is already configured for {0}" , scheme ) ) ;
117
117
}
118
118
119
- var registration = RegisterSmartSubtransportInternal < T > ( scheme ) ;
119
+ var registration = new SmartSubtransportRegistration < T > ( scheme ) ;
120
+
121
+ if ( ! data . isCustom )
122
+ {
123
+ RegisterSmartSubtransportInternal ( registration ) ;
124
+ }
120
125
121
126
data . defaultSubtransport = registration ;
127
+
122
128
return registration ;
123
129
}
124
130
}
@@ -140,8 +146,6 @@ internal static SmartSubtransportRegistration<T> RegisterDefaultSmartSubtranspor
140
146
public static SmartSubtransportRegistration < T > RegisterSmartSubtransport < T > ( string scheme )
141
147
where T : SmartSubtransport , new ( )
142
148
{
143
- SmartSubtransportRegistration < T > registration ;
144
-
145
149
Ensure . ArgumentNotNull ( scheme , "scheme" ) ;
146
150
147
151
lock ( smartSubtransportData )
@@ -158,31 +162,39 @@ public static SmartSubtransportRegistration<T> RegisterSmartSubtransport<T>(stri
158
162
Proxy . git_transport_unregister ( scheme ) ;
159
163
}
160
164
161
- registration = RegisterSmartSubtransportInternal < T > ( scheme ) ;
165
+ var previousValue = data . isCustom ;
162
166
data . isCustom = true ;
163
- }
164
167
165
- return registration ;
168
+ var registration = new SmartSubtransportRegistration < T > ( scheme ) ;
169
+
170
+ try
171
+ {
172
+ RegisterSmartSubtransportInternal ( registration ) ;
173
+ }
174
+ catch
175
+ {
176
+ data . isCustom = previousValue ;
177
+ throw ;
178
+ }
179
+
180
+ return registration ;
181
+ }
166
182
}
167
183
168
- private static SmartSubtransportRegistration < T > RegisterSmartSubtransportInternal < T > ( string scheme )
184
+ private static void RegisterSmartSubtransportInternal < T > ( SmartSubtransportRegistration < T > registration )
169
185
where T : SmartSubtransport , new ( )
170
186
{
171
- var registration = new SmartSubtransportRegistration < T > ( scheme ) ;
172
-
173
187
try
174
188
{
175
189
Proxy . git_transport_register ( registration . Scheme ,
176
190
registration . FunctionPointer ,
177
191
registration . RegistrationPointer ) ;
178
192
}
179
- catch ( Exception )
193
+ catch
180
194
{
181
195
registration . Free ( ) ;
182
196
throw ;
183
197
}
184
-
185
- return registration ;
186
198
}
187
199
188
200
/// <summary>
0 commit comments