mirror of https://github.com/Marcusk19/dotctl
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.4 KiB
Go
74 lines
1.4 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"time"
|
|
|
|
"github.com/Marcusk19/bender/tools"
|
|
"github.com/go-git/go-git/v5"
|
|
"github.com/go-git/go-git/v5/plumbing/object"
|
|
"github.com/spf13/afero"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
func init() {
|
|
RootCmd.AddCommand(backupCommand)
|
|
}
|
|
|
|
var backupCommand = &cobra.Command {
|
|
Use: "backup",
|
|
Short: "Add and commit files in dotfiles directory",
|
|
Run: runBackup,
|
|
}
|
|
|
|
func gitAddFiles(worktree *git.Worktree, fs afero.Fs) error {
|
|
entries, err := afero.ReadDir(fs, DotfilePath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for _, entry := range(entries) {
|
|
_, err = worktree.Add(entry.Name())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func runBackup(cmd *cobra.Command, args []string) {
|
|
fmt.Fprintf(cmd.OutOrStdout(), "Backing up %s...\n", DotfilePath)
|
|
r, err := git.PlainOpen(DotfilePath)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
worktree, err := r.Worktree()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
gitAddFiles(worktree, tools.AppFs)
|
|
|
|
commitMessage := "backup " + time.Now().String()
|
|
|
|
commit, err := worktree.Commit(commitMessage, &git.CommitOptions{
|
|
Author: &object.Signature{
|
|
Name: "bender CLI",
|
|
Email: "example@example.com",
|
|
When: time.Now(),
|
|
},
|
|
})
|
|
|
|
if err != nil {
|
|
log.Fatal(err.Error())
|
|
}
|
|
|
|
obj, err := r.CommitObject(commit)
|
|
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
fmt.Println(obj)
|
|
}
|