diff options
author | Maciej Wereski <m.wereski@partner.samsung.com> | 2017-03-07 13:10:32 +0100 |
---|---|---|
committer | Maciej Wereski <m.wereski@partner.samsung.com> | 2017-08-17 08:53:00 +0200 |
commit | 55a6a5107ab60579f94af53ac2844f97add4f5d8 (patch) | |
tree | b2cdea35f352cb9b4336e70657507469f9c78d7f | |
parent | 1a7c29ab68d6dd3262d440642cb35df1ad19b016 (diff) | |
download | snapsync-55a6a5107ab60579f94af53ac2844f97add4f5d8.tar.gz snapsync-55a6a5107ab60579f94af53ac2844f97add4f5d8.tar.bz2 snapsync-55a6a5107ab60579f94af53ac2844f97add4f5d8.zip |
Implement "Add Remote" job
Change-Id: Ib2867c3e36bf1acd7783aa0fb955a4b9dcfdb54a
Signed-off-by: Maciej Wereski <m.wereski@partner.samsung.com>
-rw-r--r-- | git/git.go | 37 |
1 files changed, 36 insertions, 1 deletions
@@ -17,7 +17,9 @@ package gitManager import ( + "fmt" "log" + "strings" git "gopkg.in/libgit2/git2go.v24" ) @@ -25,7 +27,40 @@ import ( // gitAddRemote is one of jobs that can be run by workers. It adds remote that // is described in req in local git repository that can be found under localMirror/req.Repo. func gitAddRemote(localMirror string, req *GitRepo) error { - log.Println("Add remote " + req.RemoteName + " in " + localMirror + req.Repo + ".") + if req.RemoteName == "" || req.RemoteURL == "" { + return fmt.Errorf("%s: URL or remote name empty", req.Repo) + } + + repo, err := git.OpenRepository(localMirror + req.Repo) + if err != nil { + return err + } + defer repo.Free() + + remote, err := repo.Remotes.Lookup(req.RemoteName) + if err != nil { + if err.(*git.GitError).Code != git.ErrNotFound { + return fmt.Errorf("looking for remote failed: %s", err) + } + r, err := repo.Remotes.Create(req.RemoteName, req.RemoteURL) + if err != nil { + return fmt.Errorf("couldn't create remote: %s", err) + } + r.Free() + // remote with requested name already exists + } else { + defer remote.Free() + // in case of different URL generate new name and update req.RemoteName + if url := remote.Url(); url != req.RemoteURL { + name := req.RemoteName + "." + req.Tag[strings.LastIndex(req.Tag, "/")+1:] + r, err := repo.Remotes.Create(name, req.RemoteURL) + if err != nil { + return fmt.Errorf("couldn't create remote %s: %s", name, err) + } + r.Free() + req.RemoteName = name + } + } return nil } |