gosick #1
@@ -168,7 +168,9 @@ type commitCmd struct {
|
|||||||
Castle string `arg:"" optional:"" name:"CASTLE" help:"Castle name."`
|
Castle string `arg:"" optional:"" name:"CASTLE" help:"Castle name."`
|
||||||
}
|
}
|
||||||
|
|
||||||
type destroyCmd struct{}
|
type destroyCmd struct {
|
||||||
|
Castle string `arg:"" optional:"" name:"CASTLE" help:"Castle name."`
|
||||||
|
}
|
||||||
|
|
||||||
type cdCmd struct{}
|
type cdCmd struct{}
|
||||||
|
|
||||||
@@ -189,13 +191,13 @@ func (c *pushCmd) Run(app *core.App) error { return app.Push(defaultCastle(c.Cas
|
|||||||
func (c *commitCmd) Run(app *core.App) error {
|
func (c *commitCmd) Run(app *core.App) error {
|
||||||
return app.Commit(defaultCastle(c.Castle), c.Message)
|
return app.Commit(defaultCastle(c.Castle), c.Message)
|
||||||
}
|
}
|
||||||
func (c *destroyCmd) Run() error { return notImplemented("destroy") }
|
func (c *destroyCmd) Run(app *core.App) error { return app.Destroy(defaultCastle(c.Castle)) }
|
||||||
func (c *cdCmd) Run() error { return notImplemented("cd") }
|
func (c *cdCmd) Run() error { return notImplemented("cd") }
|
||||||
func (c *openCmd) Run() error { return notImplemented("open") }
|
func (c *openCmd) Run() error { return notImplemented("open") }
|
||||||
func (c *execCmd) Run() error { return notImplemented("exec") }
|
func (c *execCmd) Run() error { return notImplemented("exec") }
|
||||||
func (c *execAllCmd) Run() error { return notImplemented("exec_all") }
|
func (c *execAllCmd) Run() error { return notImplemented("exec_all") }
|
||||||
func (c *rcCmd) Run(app *core.App) error { return app.Rc(defaultCastle(c.Castle)) }
|
func (c *rcCmd) Run(app *core.App) error { return app.Rc(defaultCastle(c.Castle)) }
|
||||||
func (c *generateCmd) Run() error { return notImplemented("generate") }
|
func (c *generateCmd) Run() error { return notImplemented("generate") }
|
||||||
|
|
||||||
func defaultCastle(castle string) string {
|
func defaultCastle(castle string) string {
|
||||||
if strings.TrimSpace(castle) == "" {
|
if strings.TrimSpace(castle) == "" {
|
||||||
|
|||||||
@@ -165,6 +165,33 @@ func (a *App) Commit(castle string, message string) error {
|
|||||||
return runGitWithIO(castledir, a.Stdout, a.Stderr, "commit", "-m", trimmedMessage)
|
return runGitWithIO(castledir, a.Stdout, a.Stderr, "commit", "-m", trimmedMessage)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *App) Destroy(castle string) error {
|
||||||
|
if strings.TrimSpace(castle) == "" {
|
||||||
|
castle = "dotfiles"
|
||||||
|
}
|
||||||
|
|
||||||
|
castleRoot := filepath.Join(a.ReposDir, castle)
|
||||||
|
castleInfo, err := os.Lstat(castleRoot)
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, os.ErrNotExist) {
|
||||||
|
return fmt.Errorf("castle %q not found", castle)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only attempt unlinking managed home files for regular castle directories.
|
||||||
|
if castleInfo.Mode()&os.ModeSymlink == 0 {
|
||||||
|
castleHome := filepath.Join(castleRoot, "home")
|
||||||
|
if info, statErr := os.Stat(castleHome); statErr == nil && info.IsDir() {
|
||||||
|
if unlinkErr := a.UnlinkCastle(castle); unlinkErr != nil {
|
||||||
|
return unlinkErr
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return os.RemoveAll(castleRoot)
|
||||||
|
}
|
||||||
|
|
||||||
func (a *App) Link(castle string) error {
|
func (a *App) Link(castle string) error {
|
||||||
if strings.TrimSpace(castle) == "" {
|
if strings.TrimSpace(castle) == "" {
|
||||||
castle = "dotfiles"
|
castle = "dotfiles"
|
||||||
|
|||||||
Reference in New Issue
Block a user