78 lines
2.4 KiB
Go
78 lines
2.4 KiB
Go
|
// Copyright 2018 clair authors
|
||
|
//
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
// you may not use this file except in compliance with the License.
|
||
|
// You may obtain a copy of the License at
|
||
|
//
|
||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
//
|
||
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
// See the License for the specific language governing permissions and
|
||
|
// limitations under the License.
|
||
|
|
||
|
package gitutil
|
||
|
|
||
|
import (
|
||
|
"io/ioutil"
|
||
|
"os"
|
||
|
"os/exec"
|
||
|
"strings"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func createTemporaryGitRepo(t *testing.T) string {
|
||
|
// create temporary folder
|
||
|
path, err := ioutil.TempDir(os.TempDir(), "1b750a87bbfc")
|
||
|
require.Nil(t, err)
|
||
|
|
||
|
// initialize git
|
||
|
cmd := exec.Command("git", "init", path)
|
||
|
out, err := cmd.CombinedOutput()
|
||
|
require.Nil(t, err, "Failed to initialize temporary git repo, output=%s", string(out))
|
||
|
return path
|
||
|
}
|
||
|
|
||
|
func createEmptyCommit(t *testing.T, repoPath string) {
|
||
|
cmd := exec.Command("git", "commit", "-m", "\"init\"", "--allow-empty")
|
||
|
cmd.Dir = repoPath
|
||
|
out, err := cmd.CombinedOutput()
|
||
|
require.Nil(t, err, "Failed to submit first empty git commit, output=%s", string(out))
|
||
|
}
|
||
|
|
||
|
func getHeadCommitRev(t *testing.T, repoPath string) string {
|
||
|
cmd := exec.Command("git", "rev-parse", "HEAD")
|
||
|
cmd.Dir = repoPath
|
||
|
out, err := cmd.CombinedOutput()
|
||
|
require.Nil(t, err, "Failed to get head revision, output=%s", string(out))
|
||
|
return strings.TrimSuffix(string(out), "\n")
|
||
|
}
|
||
|
|
||
|
func TestCloneOrPull(t *testing.T) {
|
||
|
remote := createTemporaryGitRepo(t)
|
||
|
createEmptyCommit(t, remote)
|
||
|
expectedHead := getHeadCommitRev(t, remote)
|
||
|
t.Log(expectedHead)
|
||
|
repoPath := ""
|
||
|
tempDirPrefix := "9c2d4181"
|
||
|
path, head, err := CloneOrPull(remote, repoPath, tempDirPrefix)
|
||
|
require.Nil(t, err)
|
||
|
_, err = os.Stat(path)
|
||
|
require.Nil(t, err, "Expect generated repo to exist")
|
||
|
require.Equal(t, expectedHead, head)
|
||
|
|
||
|
// create second empty commit to try pull
|
||
|
createEmptyCommit(t, remote)
|
||
|
expectedHead = getHeadCommitRev(t, remote)
|
||
|
t.Log(expectedHead)
|
||
|
newPath, newHead, err := CloneOrPull(remote, path, tempDirPrefix)
|
||
|
require.Nil(t, err)
|
||
|
_, err = os.Stat(path)
|
||
|
require.Nil(t, err, "Expect generated repo to exist")
|
||
|
require.Equal(t, path, newPath, "No new path should be created when pulling")
|
||
|
require.Equal(t, expectedHead, newHead)
|
||
|
}
|