@@ -693,29 +693,39 @@ int upgrade_repository_format(int target_version)
693
693
struct strbuf err = STRBUF_INIT ;
694
694
struct strbuf repo_version = STRBUF_INIT ;
695
695
struct repository_format repo_fmt = REPOSITORY_FORMAT_INIT ;
696
+ int ret ;
696
697
697
698
strbuf_git_common_path (& sb , the_repository , "config" );
698
699
read_repository_format (& repo_fmt , sb .buf );
699
700
strbuf_release (& sb );
700
701
701
- if (repo_fmt .version >= target_version )
702
- return 0 ;
702
+ if (repo_fmt .version >= target_version ) {
703
+ ret = 0 ;
704
+ goto out ;
705
+ }
703
706
704
707
if (verify_repository_format (& repo_fmt , & err ) < 0 ) {
705
- error ("cannot upgrade repository format from %d to %d: %s" ,
706
- repo_fmt .version , target_version , err .buf );
707
- strbuf_release (& err );
708
- return -1 ;
708
+ ret = error ("cannot upgrade repository format from %d to %d: %s" ,
709
+ repo_fmt .version , target_version , err .buf );
710
+ goto out ;
711
+ }
712
+ if (!repo_fmt .version && repo_fmt .unknown_extensions .nr ) {
713
+ ret = error ("cannot upgrade repository format: "
714
+ "unknown extension %s" ,
715
+ repo_fmt .unknown_extensions .items [0 ].string );
716
+ goto out ;
709
717
}
710
- if (!repo_fmt .version && repo_fmt .unknown_extensions .nr )
711
- return error ("cannot upgrade repository format: "
712
- "unknown extension %s" ,
713
- repo_fmt .unknown_extensions .items [0 ].string );
714
718
715
719
strbuf_addf (& repo_version , "%d" , target_version );
716
720
git_config_set ("core.repositoryformatversion" , repo_version .buf );
721
+
722
+ ret = 1 ;
723
+
724
+ out :
725
+ clear_repository_format (& repo_fmt );
717
726
strbuf_release (& repo_version );
718
- return 1 ;
727
+ strbuf_release (& err );
728
+ return ret ;
719
729
}
720
730
721
731
static void init_repository_format (struct repository_format * format )
@@ -2190,6 +2200,7 @@ int init_db(const char *git_dir, const char *real_git_dir,
2190
2200
git_dir , len && git_dir [len - 1 ] != '/' ? "/" : "" );
2191
2201
}
2192
2202
2203
+ clear_repository_format (& repo_fmt );
2193
2204
free (original_git_dir );
2194
2205
return 0 ;
2195
2206
}
0 commit comments