@@ -239,7 +239,7 @@ int git_reference_lookup_resolved(
239239
240240int git_reference_dwim (git_reference * * out , git_repository * repo , const char * refname )
241241{
242- int error = 0 , i ;
242+ int error = 0 , i , valid ;
243243 bool fallbackmode = true, foundvalid = false;
244244 git_reference * ref ;
245245 git_buf refnamebuf = GIT_BUF_INIT , name = GIT_BUF_INIT ;
@@ -265,10 +265,11 @@ int git_reference_dwim(git_reference **out, git_repository *repo, const char *re
265265
266266 git_buf_clear (& refnamebuf );
267267
268- if ((error = git_buf_printf (& refnamebuf , formatters [i ], git_buf_cstr (& name ))) < 0 )
268+ if ((error = git_buf_printf (& refnamebuf , formatters [i ], git_buf_cstr (& name ))) < 0 ||
269+ (error = git_reference_name_is_valid (& valid , git_buf_cstr (& refnamebuf ))) < 0 )
269270 goto cleanup ;
270271
271- if (!git_reference_is_valid_name ( git_buf_cstr ( & refnamebuf )) ) {
272+ if (!valid ) {
272273 error = GIT_EINVALIDSPEC ;
273274 continue ;
274275 }
@@ -1287,19 +1288,30 @@ int git_reference_peel(
12871288 return error ;
12881289}
12891290
1290- int git_reference__is_valid_name (const char * refname , unsigned int flags )
1291+ int git_reference__name_is_valid (
1292+ int * valid ,
1293+ const char * refname ,
1294+ unsigned int flags )
12911295{
1292- if (git_reference__normalize_name (NULL , refname , flags ) < 0 ) {
1293- git_error_clear ();
1294- return false;
1295- }
1296+ int error ;
12961297
1297- return true;
1298+ GIT_ASSERT (valid && refname );
1299+
1300+ * valid = 0 ;
1301+
1302+ error = git_reference__normalize_name (NULL , refname , flags );
1303+
1304+ if (!error )
1305+ * valid = 1 ;
1306+ else if (error == GIT_EINVALIDSPEC )
1307+ error = 0 ;
1308+
1309+ return error ;
12981310}
12991311
1300- int git_reference_is_valid_name ( const char * refname )
1312+ int git_reference_name_is_valid ( int * valid , const char * refname )
13011313{
1302- return git_reference__is_valid_name ( refname , GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL );
1314+ return git_reference__name_is_valid ( valid , refname , GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL );
13031315}
13041316
13051317const char * git_reference__shorthand (const char * name )
@@ -1345,3 +1357,18 @@ int git_reference__is_unborn_head(bool *unborn, const git_reference *ref, git_re
13451357
13461358 return 0 ;
13471359}
1360+
1361+ /* Deprecated functions */
1362+
1363+ #ifndef GIT_DEPRECATE_HARD
1364+
1365+ int git_reference_is_valid_name (const char * refname )
1366+ {
1367+ int valid = 0 ;
1368+
1369+ git_reference__name_is_valid (& valid , refname , GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL );
1370+
1371+ return valid ;
1372+ }
1373+
1374+ #endif
0 commit comments