From f912c28ac0cb027c404c06b4ca7873012ba6f540 Mon Sep 17 00:00:00 2001 From: Byoungchan Lee Date: Mon, 1 Feb 2021 22:16:04 +0900 Subject: [PATCH 1/3] Implement git_repository_set_config --- repository.go | 9 ++++++++ repository_test.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/repository.go b/repository.go index d2b9961..528298f 100644 --- a/repository.go +++ b/repository.go @@ -165,6 +165,15 @@ func (v *Repository) Config() (*Config, error) { return config, nil } +func (v *Repository) SetConfig(c *Config) error { + ret := C.git_repository_set_config(v.ptr, c.ptr) + runtime.KeepAlive(v) + 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: "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") + } +} -- 2.45.2 From a23d33dee4f8095a7750f04d7b26d2bd6276a781 Mon Sep 17 00:00:00 2001 From: Byoungchan Lee Date: Mon, 1 Feb 2021 22:24:54 +0900 Subject: [PATCH 2/3] Fix for missing LockOSThread call --- repository.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/repository.go b/repository.go index 528298f..1094287 100644 --- a/repository.go +++ b/repository.go @@ -166,6 +166,9 @@ func (v *Repository) Config() (*Config, error) { } 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) if ret < 0 { -- 2.45.2 From ade1fdde290f0325120101edf6ff546251137ae9 Mon Sep 17 00:00:00 2001 From: Byoungchan Lee Date: Wed, 3 Feb 2021 23:15:39 +0900 Subject: [PATCH 3/3] Update repository.go to add a comment for the public API and fix Runtime issue. --- repository.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/repository.go b/repository.go index 1094287..ff176b5 100644 --- a/repository.go +++ b/repository.go @@ -165,12 +165,17 @@ 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) } -- 2.45.2