Implement git_repository_set_config (#735) (#743)

Closes #732

(cherry picked from commit 2fd0495c43)

Co-authored-by: Byoungchan Lee <daniel.l@hpcnt.com>
This commit is contained in:
github-actions[bot] 2021-03-07 17:55:17 -08:00 committed by GitHub
parent c0b9936476
commit 275690e61a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 63 additions and 0 deletions

View File

@ -165,6 +165,17 @@ func (v *Repository) Config() (*Config, error) {
return config, nil return config, nil
} }
// SetConfig sets the configuration file for this repository.
//
// This configuration file will be used for all configuration queries involving
// this repository.
func (v *Repository) SetConfig(c *Config) error {
C.git_repository_set_config(v.ptr, c.ptr)
runtime.KeepAlive(v)
runtime.KeepAlive(c)
return nil
}
func (v *Repository) Index() (*Index, error) { func (v *Repository) Index() (*Index, error) {
var ptr *C.git_index var ptr *C.git_index

View File

@ -40,3 +40,55 @@ func TestCreateCommitFromIds(t *testing.T) {
t.Errorf("mismatched commit ids, expected %v, got %v", expectedCommitId.String(), commitId.String()) t.Errorf("mismatched commit ids, expected %v, got %v", expectedCommitId.String(), commitId.String())
} }
} }
func TestRepositorySetConfig(t *testing.T) {
repo := createTestRepo(t)
defer cleanupTestRepo(t, repo)
loc, err := time.LoadLocation("Europe/Berlin")
checkFatal(t, err)
sig := &Signature{
Name: "Rand Om Hacker",
Email: "random@hacker.com",
When: time.Date(2013, 03, 06, 14, 30, 0, 0, loc),
}
idx, err := repo.Index()
checkFatal(t, err)
err = idx.AddByPath("README")
treeId, err := idx.WriteTree()
checkFatal(t, err)
message := "This is a commit\n"
tree, err := repo.LookupTree(treeId)
checkFatal(t, err)
_, err = repo.CreateCommit("HEAD", sig, sig, message, tree)
checkFatal(t, err)
repoConfig, err := repo.Config()
checkFatal(t, err)
temp := Config{}
localConfig, err := temp.OpenLevel(repoConfig, ConfigLevelLocal)
checkFatal(t, err)
repoConfig = nil
err = repo.SetConfig(localConfig)
checkFatal(t, err)
configFieldName := "core.filemode"
err = localConfig.SetBool(configFieldName, true)
checkFatal(t, err)
localConfig = nil
repoConfig, err = repo.Config()
checkFatal(t, err)
result, err := repoConfig.LookupBool(configFieldName)
checkFatal(t, err)
if result != true {
t.Fatal("result must be true")
}
}