Skip to content

Commit

Permalink
Merge pull request #2 from azak-azkaran/feature/separate_git_remote
Browse files Browse the repository at this point in the history
Feature/separate git remote
  • Loading branch information
azak-azkaran committed Nov 4, 2020
2 parents 3b68fcf + bca194d commit aff4565
Show file tree
Hide file tree
Showing 6 changed files with 110 additions and 8 deletions.
1 change: 1 addition & 0 deletions backup_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@ func TestBackupForget(t *testing.T) {
cmd = ForgetRepoDetail(env, pwd, 1, 1, 1)
job = CreateJobFromCommand(cmd, "forget")
err = job.RunJob(true)
assert.NoError(t, err)

cmd = ListRepo(env, pwd)
job = CreateJobFromCommand(cmd, "list")
Expand Down
25 changes: 24 additions & 1 deletion git.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"strings"

git "github.com/go-git/go-git/v5"
"github.com/go-git/go-git/v5/config"
"github.com/go-git/go-git/v5/plumbing/transport/http"
)

Expand Down Expand Up @@ -45,6 +46,24 @@ func GitClone(repo string, dir string, home string, personal string) error {
return nil
}

func GitCreateRemote(dir string, home string, repoUrl string) error {
path := strings.ReplaceAll(dir, HOME, home)
r, err := git.PlainOpen(path)
if err != nil {
return err
}
_, err = r.Remote(GIT_REMOTE_NAME)
if err != nil && err == git.ErrRemoteNotFound {
log.Println("Adding remote: ", GIT_REMOTE_NAME)
_, err = r.CreateRemote(&config.RemoteConfig{
Name: GIT_REMOTE_NAME,
URLs: []string{repoUrl},
})
return err
}
return err
}

func GitPull(dir string, home string, personal string) error {
path := strings.ReplaceAll(dir, HOME, home)
log.Println("Pulling from: ", path)
Expand All @@ -59,13 +78,17 @@ func GitPull(dir string, home string, personal string) error {
return err
}

var pullOptions git.PullOptions
pullOptions := git.PullOptions{
RemoteName: GIT_REMOTE_NAME,
}

if personal != "" {
pullOptions.Auth = &http.BasicAuth{
Username: "abc123", // yes, this can be anything except an empty string
Password: personal,
}
}

// Pull the latest changes from the origin remote and merge into the current branch
err = w.Pull(&pullOptions)
if err != nil && err != git.NoErrAlreadyUpToDate {
Expand Down
73 changes: 70 additions & 3 deletions git_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"testing"

"github.com/go-git/go-git/v5"
"github.com/go-git/go-git/v5/plumbing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
Expand All @@ -23,10 +24,13 @@ func TestGitClone(t *testing.T) {
assert.NoError(t, err)
assert.DirExists(t, test_folder)

_, err = git.PlainOpen(test_folder)
assert.NoError(t, err)

// Second Clone for test if repo exists error is ignored
err = GitClone(GIT_TEST_REPO, GIT_TEST_FOLDER, pwd, "test")
require.Error(t, err)
assert.EqualError(t, err, git.ErrRepositoryAlreadyExists.Error())
assert.Error(t, git.ErrRepositoryAlreadyExists, err)
}

func TestGitPull(t *testing.T) {
Expand All @@ -37,10 +41,73 @@ func TestGitPull(t *testing.T) {
test_folder := strings.ReplaceAll(GIT_TEST_FOLDER, HOME, pwd)
require.NoDirExists(t, test_folder)

err = GitClone(GIT_TEST_REPO, GIT_TEST_FOLDER, pwd, "")
r, err := git.PlainClone(test_folder, false, &git.CloneOptions{
URL: GIT_TEST_REPO,
})

require.NoError(t, err)
require.DirExists(t, test_folder)

ref, err := r.Head()
require.NoError(t, err)
head := ref.Hash().String()

remote, err := r.Remote(GIT_REMOTE_NAME)
assert.Error(t, git.ErrRemoteNotFound, err)
assert.Nil(t, remote)

w, err := r.Worktree()
assert.NoError(t, err)
assert.DirExists(t, test_folder)
assert.NotNil(t, w)

err = w.Checkout(&git.CheckoutOptions{
Hash: plumbing.NewHash(GIT_TEST_COMMIT),
})
assert.NoError(t, err)
ref, err = r.Head()
assert.NoError(t, err)
assert.Equal(t, GIT_TEST_COMMIT, ref.Hash().String())

err = GitPull(GIT_TEST_FOLDER, pwd, "")
assert.Error(t, git.ErrRemoteNotFound, err)
err = GitCreateRemote(GIT_TEST_FOLDER, pwd, GIT_TEST_REPO)
assert.NoError(t, err)

err = GitPull(GIT_TEST_FOLDER, pwd, "")
assert.NoError(t, err)
remote, err = r.Remote(GIT_REMOTE_NAME)
assert.NoError(t, err)
assert.NotNil(t, remote)

ref, err = r.Head()
assert.NoError(t, err)
assert.Equal(t, head, ref.Hash().String())
}

func TestGitCreateRemote(t *testing.T) {
fmt.Println("running: TestGitCreateRemote")
t.Cleanup(clear)

t.Cleanup(clear)
pwd, err := os.Getwd()
require.NoError(t, err)
test_folder := strings.ReplaceAll(GIT_TEST_FOLDER, HOME, pwd)
require.NoDirExists(t, test_folder)

r, err := git.PlainClone(test_folder, false, &git.CloneOptions{
URL: GIT_TEST_REPO,
})
require.NoError(t, err)
require.DirExists(t, test_folder)

remote, err := r.Remote(GIT_REMOTE_NAME)
assert.Error(t, git.ErrRemoteNotFound, err)
assert.Nil(t, remote)

err = GitCreateRemote(GIT_TEST_FOLDER, pwd, GIT_TEST_REPO)
assert.NoError(t, err)

remote, err = r.Remote(GIT_REMOTE_NAME)
assert.NoError(t, err)
assert.NotNil(t, remote)
}
6 changes: 5 additions & 1 deletion main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,11 @@ func TestMainSendRequest(t *testing.T) {
Addr: MAIN_TEST_ADDRESS,
Handler: router,
}
go server.ListenAndServe()
go func() {
err := server.ListenAndServe()
assert.Equal(t, http.ErrServerClosed, err)
}()

time.Sleep(100 * time.Millisecond)
AgentConfiguration.Address = MAIN_TEST_ADDRESS

Expand Down
7 changes: 6 additions & 1 deletion restrouter.go
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,12 @@ func postGit(c *gin.Context) {
}, msg.Mode+" "+v.Name)
case "pull":
job = CreateJobFromFunction(func() error {
return GitPull(v.Directory, config.Agent.HomeFolder, v.PersonalToken)
err := GitCreateRemote(v.Directory, config.Agent.HomeFolder, v.Rep)
if err != nil {
return err
} else {
return GitPull(v.Directory, config.Agent.HomeFolder, v.PersonalToken)
}
}, msg.Mode+" "+v.Name)
default:
returnErr(errors.New("Not supported Mode: "+msg.Mode), ERROR_GIT, c)
Expand Down
6 changes: 4 additions & 2 deletions statics.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ const (
RESTIC_ACCESS_KEY = "AWS_ACCESS_KEY_ID="
RESTIC_SECRET_KEY = "AWS_SECRET_ACCESS_KEY="

// Git Contstatns
GIT_REMOTE_NAME = "agent_remote"

// Store Constants
STORE_TOKEN = "token"
STORE_TIMESTAMP = "timestamp"
Expand Down Expand Up @@ -52,13 +55,11 @@ const (
ERROR_MODE = "Backup Mode:"
ERROR_GIT = "GIT Mode:"
ERROR_STATUS = "GetStatus:"
ERROR_LOG = "GetLogs:"
ERROR_ISSEALED = "IsSealed:"
ERROR_UNSEAL = "Unseal:"
ERROR_SEAL = "Seal:"
ERROR_RUNBACKUP = "RunBackupJob:"
ERROR_RUNMOUNT = "RunMountJob:"
ERROR_ENQUEUE = "Enqueue:"
ERROR_CONFIG = "GetConfigFromVault:"
ERROR_BINDING = "BindJSON:"
ERROR_PUT_TOKEN = "PutToken:"
Expand Down Expand Up @@ -88,6 +89,7 @@ const (
GIT_TEST_REPO = "https://github.com/azak-azkaran/reverse-link"
GIT_TEST_FOLDER_VIMRC = "~/test/vimrc"
GIT_TEST_REPO_VIMRC = "https://github.com/amix/vimrc.git"
GIT_TEST_COMMIT = "dd7e3c0b1ec7bbde6034d8cb2739bcd67f2530a4"

VAULT_TEST_PASSWORD = "hallo"
VAULT_TEST_TOKEN = "superrandompasswordtoken"
Expand Down

0 comments on commit aff4565

Please sign in to comment.