@@ -1809,24 +1809,50 @@ static int remove_branch_config_related_entries(
1809
1809
return error ;
1810
1810
}
1811
1811
1812
- static int remove_refs (git_repository * repo , const char * glob )
1812
+ static int remove_refs (git_repository * repo , const git_refspec * spec )
1813
1813
{
1814
- git_reference_iterator * iter ;
1814
+ git_reference_iterator * iter = NULL ;
1815
+ git_vector refs ;
1815
1816
const char * name ;
1817
+ char * dup ;
1816
1818
int error ;
1819
+ size_t i ;
1817
1820
1818
- if ((error = git_reference_iterator_glob_new ( & iter , repo , glob )) < 0 )
1821
+ if ((error = git_vector_init ( & refs , 8 , NULL )) < 0 )
1819
1822
return error ;
1820
1823
1824
+ if ((error = git_reference_iterator_new (& iter , repo )) < 0 )
1825
+ goto cleanup ;
1826
+
1821
1827
while ((error = git_reference_next_name (& name , iter )) == 0 ) {
1822
- if ((error = git_reference_remove (repo , name )) < 0 )
1823
- break ;
1824
- }
1825
- git_reference_iterator_free (iter );
1828
+ if (!git_refspec_dst_matches (spec , name ))
1829
+ continue ;
1830
+
1831
+ dup = git__strdup (name );
1832
+ if (!dup ) {
1833
+ error = -1 ;
1834
+ goto cleanup ;
1835
+ }
1826
1836
1837
+ if ((error = git_vector_insert (& refs , dup )) < 0 )
1838
+ goto cleanup ;
1839
+ }
1827
1840
if (error == GIT_ITEROVER )
1828
1841
error = 0 ;
1842
+ if (error < 0 )
1843
+ goto cleanup ;
1844
+
1845
+ git_vector_foreach (& refs , i , name ) {
1846
+ if ((error = git_reference_remove (repo , name )) < 0 )
1847
+ break ;
1848
+ }
1829
1849
1850
+ cleanup :
1851
+ git_reference_iterator_free (iter );
1852
+ git_vector_foreach (& refs , i , dup ) {
1853
+ git__free (dup );
1854
+ }
1855
+ git_vector_free (& refs );
1830
1856
return error ;
1831
1857
}
1832
1858
@@ -1848,7 +1874,7 @@ static int remove_remote_tracking(git_repository *repo, const char *remote_name)
1848
1874
if (refspec == NULL )
1849
1875
continue ;
1850
1876
1851
- if ((error = remove_refs (repo , git_refspec_dst ( refspec ) )) < 0 )
1877
+ if ((error = remove_refs (repo , refspec )) < 0 )
1852
1878
break ;
1853
1879
}
1854
1880
0 commit comments