summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--repository.go17
-rw-r--r--repository_test.go52
2 files changed, 69 insertions, 0 deletions
diff --git a/repository.go b/repository.go
index bba5700..a6eb7f1 100644
--- a/repository.go
+++ b/repository.go
@@ -165,6 +165,23 @@ func (v *Repository) Config() (*Config, error) {
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 {
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ ret := C.git_repository_set_config(v.ptr, c.ptr)
+ runtime.KeepAlive(v)
+ runtime.KeepAlive(c)
+ if ret < 0 {
+ return MakeGitError(ret)
+ }
+ return nil
+}
+
func (v *Repository) Index() (*Index, error) {
var ptr *C.git_index
diff --git a/repository_test.go b/repository_test.go
index 1950c69..5a0f920 100644
--- a/repository_test.go
+++ b/repository_test.go
@@ -40,3 +40,55 @@ func TestCreateCommitFromIds(t *testing.T) {
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: "[email protected]",
+ 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")
+ }
+}