diff options
Diffstat (limited to 'bridge/core/config.go')
-rw-r--r-- | bridge/core/config.go | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/bridge/core/config.go b/bridge/core/config.go new file mode 100644 index 00000000..afcda560 --- /dev/null +++ b/bridge/core/config.go @@ -0,0 +1,46 @@ +package core + +import ( + "github.com/MichaelMure/git-bug/cache" + "github.com/MichaelMure/git-bug/identity" +) + +func FinishConfig(repo *cache.RepoCache, metaKey string, login string) error { + // if no user exist with the given login metadata + _, err := repo.ResolveIdentityImmutableMetadata(metaKey, login) + if err != nil && err != identity.ErrIdentityNotExist { + // real error + return err + } + if err == nil { + // found an already valid user, all good + return nil + } + + // if a default user exist, tag it with the login + user, err := repo.GetUserIdentity() + if err != nil && err != identity.ErrNoIdentitySet { + // real error + return err + } + if err == nil { + // found one + user.SetMetadata(metaKey, login) + return user.CommitAsNeeded() + } + + // otherwise create a user with that metadata + i, err := repo.NewIdentityFromGitUserRaw(map[string]string{ + metaKey: login, + }) + if err != nil { + return err + } + + err = repo.SetUserIdentity(i) + if err != nil { + return err + } + + return nil +} |