Skip to content

Commit 2fd0495

Browse files
Implement git_repository_set_config (#735)
Closes #732
1 parent 73d97b9 commit 2fd0495

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

repository.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,23 @@ func (v *Repository) Config() (*Config, error) {
165165
return config, nil
166166
}
167167

168+
// SetConfig sets the configuration file for this repository.
169+
//
170+
// This configuration file will be used for all configuration queries involving
171+
// this repository.
172+
func (v *Repository) SetConfig(c *Config) error {
173+
runtime.LockOSThread()
174+
defer runtime.UnlockOSThread()
175+
176+
ret := C.git_repository_set_config(v.ptr, c.ptr)
177+
runtime.KeepAlive(v)
178+
runtime.KeepAlive(c)
179+
if ret < 0 {
180+
return MakeGitError(ret)
181+
}
182+
return nil
183+
}
184+
168185
func (v *Repository) Index() (*Index, error) {
169186
var ptr *C.git_index
170187

repository_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,55 @@ func TestCreateCommitFromIds(t *testing.T) {
4040
t.Errorf("mismatched commit ids, expected %v, got %v", expectedCommitId.String(), commitId.String())
4141
}
4242
}
43+
44+
func TestRepositorySetConfig(t *testing.T) {
45+
repo := createTestRepo(t)
46+
defer cleanupTestRepo(t, repo)
47+
48+
loc, err := time.LoadLocation("Europe/Berlin")
49+
checkFatal(t, err)
50+
sig := &Signature{
51+
Name: "Rand Om Hacker",
52+
Email: "random@hacker.com",
53+
When: time.Date(2013, 03, 06, 14, 30, 0, 0, loc),
54+
}
55+
56+
idx, err := repo.Index()
57+
checkFatal(t, err)
58+
err = idx.AddByPath("README")
59+
60+
treeId, err := idx.WriteTree()
61+
checkFatal(t, err)
62+
63+
message := "This is a commit\n"
64+
tree, err := repo.LookupTree(treeId)
65+
checkFatal(t, err)
66+
_, err = repo.CreateCommit("HEAD", sig, sig, message, tree)
67+
checkFatal(t, err)
68+
69+
repoConfig, err := repo.Config()
70+
checkFatal(t, err)
71+
72+
temp := Config{}
73+
localConfig, err := temp.OpenLevel(repoConfig, ConfigLevelLocal)
74+
checkFatal(t, err)
75+
repoConfig = nil
76+
77+
err = repo.SetConfig(localConfig)
78+
checkFatal(t, err)
79+
80+
configFieldName := "core.filemode"
81+
err = localConfig.SetBool(configFieldName, true)
82+
checkFatal(t, err)
83+
84+
localConfig = nil
85+
86+
repoConfig, err = repo.Config()
87+
checkFatal(t, err)
88+
89+
result, err := repoConfig.LookupBool(configFieldName)
90+
checkFatal(t, err)
91+
if result != true {
92+
t.Fatal("result must be true")
93+
}
94+
}

0 commit comments

Comments
 (0)