aboutsummaryrefslogtreecommitdiffstats
path: root/_examples
diff options
context:
space:
mode:
authorPierre-Yves Aillet <pyaillet@gmail.com>2020-05-14 21:32:46 +0200
committerPierre-Yves Aillet <pyaillet@gmail.com>2020-05-14 21:35:28 +0200
commit199a7a321854ac368f4532e7e098f01cec2cc7c4 (patch)
tree521939795fe54d7ce968ff1f22d4844e6bde6b10 /_examples
parent6f9eb4ef0f8b33763ba79a0ceaaf71dd6db6255a (diff)
downloadgo-git-199a7a321854ac368f4532e7e098f01cec2cc7c4.tar.gz
_examples: submodule, adding an example with submodule update
the goal of this pull request is to add an example of how to make the equivalent of `git submodule update --remote` with `go-git`
Diffstat (limited to '_examples')
-rw-r--r--_examples/submodule/main.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/_examples/submodule/main.go b/_examples/submodule/main.go
new file mode 100644
index 0000000..1a76193
--- /dev/null
+++ b/_examples/submodule/main.go
@@ -0,0 +1,55 @@
+package main
+
+import (
+ "os"
+
+ "github.com/go-git/go-git/v5"
+ . "github.com/go-git/go-git/v5/_examples"
+)
+
+// Basic example of how to clone a repository including a submodule and
+// updating submodule ref
+func main() {
+ CheckArgs("<url>", "<directory>", "<submodule>")
+ url := os.Args[1]
+ directory := os.Args[2]
+ submodule := os.Args[3]
+
+ // Clone the given repository to the given directory
+ Info("git clone %s %s --recursive", url, directory)
+
+ r, err := git.PlainClone(directory, false, &git.CloneOptions{
+ URL: url,
+ RecurseSubmodules: git.DefaultSubmoduleRecursionDepth,
+ })
+
+ CheckIfError(err)
+
+ w, err := r.Worktree()
+ if err != nil {
+ CheckIfError(err)
+ }
+
+ sub, err := w.Submodule(submodule)
+ if err != nil {
+ CheckIfError(err)
+ }
+
+ sr, err := sub.Repository()
+ if err != nil {
+ CheckIfError(err)
+ }
+
+ sw, err := sr.Worktree()
+ if err != nil {
+ CheckIfError(err)
+ }
+
+ Info("git submodule update --remote")
+ err = sw.Pull(&git.PullOptions{
+ RemoteName: "origin",
+ })
+ if err != nil {
+ CheckIfError(err)
+ }
+}