config/module: Mercurial support
This commit is contained in:
parent
fc71d7091f
commit
7e94f7d4a9
|
@ -33,6 +33,7 @@ func init() {
|
|||
Getters = map[string]Getter{
|
||||
"file": new(FileGetter),
|
||||
"git": new(GitGetter),
|
||||
"hg": new(HgGetter),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
package module
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/url"
|
||||
"os"
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
// HgGetter is a Getter implementation that will download a module from
|
||||
// a Mercurial repository.
|
||||
type HgGetter struct{}
|
||||
|
||||
func (g *HgGetter) Get(dst string, u *url.URL) error {
|
||||
if _, err := exec.LookPath("hg"); err != nil {
|
||||
return fmt.Errorf("hg must be available and on the PATH")
|
||||
}
|
||||
|
||||
_, err := os.Stat(dst)
|
||||
if err != nil && !os.IsNotExist(err) {
|
||||
return err
|
||||
}
|
||||
if err != nil {
|
||||
if err := g.clone(dst, u); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if err:= g.pull(dst, u); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return g.update(dst, u)
|
||||
}
|
||||
|
||||
func (g *HgGetter) clone(dst string, u *url.URL) error {
|
||||
cmd := exec.Command("hg", "clone", "-U", u.String(), dst)
|
||||
return getRunCommand(cmd)
|
||||
}
|
||||
|
||||
func (g *HgGetter) pull(dst string, u *url.URL) error {
|
||||
cmd := exec.Command("hg", "pull")
|
||||
cmd.Dir = dst
|
||||
return getRunCommand(cmd)
|
||||
}
|
||||
|
||||
func (g *HgGetter) update(dst string, u *url.URL) error {
|
||||
cmd := exec.Command("hg", "update")
|
||||
cmd.Dir = dst
|
||||
return getRunCommand(cmd)
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
package module
|
||||
|
||||
import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
)
|
||||
|
||||
var testHasHg bool
|
||||
|
||||
func init() {
|
||||
if _, err := exec.LookPath("hg"); err == nil {
|
||||
testHasHg = true
|
||||
}
|
||||
}
|
||||
|
||||
func TestHgGetter_impl(t *testing.T) {
|
||||
var _ Getter = new(HgGetter)
|
||||
}
|
||||
|
||||
func TestHgGetter(t *testing.T) {
|
||||
if !testHasHg {
|
||||
t.Log("hg not found, skipping")
|
||||
t.Skip()
|
||||
}
|
||||
|
||||
g := new(HgGetter)
|
||||
dst := tempDir(t)
|
||||
|
||||
// With a dir that doesn't exist
|
||||
if err := g.Get(dst, testModuleURL("basic-hg")); err != nil {
|
||||
t.Fatalf("err: %s", err)
|
||||
}
|
||||
|
||||
// Verify the main file exists
|
||||
mainPath := filepath.Join(dst, "main.tf")
|
||||
if _, err := os.Stat(mainPath); err != nil {
|
||||
t.Fatalf("err: %s", err)
|
||||
}
|
||||
}
|
Binary file not shown.
|
@ -0,0 +1,2 @@
|
|||
dcaed7754d58264cb9a5916215a5442377307bd1 0
|
||||
dcaed7754d58264cb9a5916215a5442377307bd1 o default
|
Binary file not shown.
|
@ -0,0 +1,2 @@
|
|||
Commit
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
dotencode
|
||||
fncache
|
||||
revlogv1
|
||||
store
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1 @@
|
|||
data/main.tf.i
|
|
@ -0,0 +1 @@
|
|||
1 dcaed7754d58264cb9a5916215a5442377307bd1
|
Binary file not shown.
|
@ -0,0 +1 @@
|
|||
default
|
|
@ -0,0 +1,2 @@
|
|||
0
|
||||
commit
|
Binary file not shown.
|
@ -0,0 +1,5 @@
|
|||
# Hello
|
||||
|
||||
module "foo" {
|
||||
source = "./foo"
|
||||
}
|
Loading…
Reference in New Issue