github.com/erikjuhani/git-gong@v0.0.0-20220213141213-6b9fa82d4e7c/cmd/switch.go (about) 1 package cmd 2 3 import ( 4 "github.com/erikjuhani/git-gong/gong" 5 "github.com/spf13/cobra" 6 ) 7 8 func init() { 9 rootCmd.AddCommand(switchCmd) 10 11 switchCmd.AddCommand( 12 switchBranchCmd, 13 switchCommitCmd, 14 switchTagCmd, 15 switchReleaseCmd, 16 ) 17 } 18 19 var switchCmd = &cobra.Command{ 20 Use: "switch [subcommand]", 21 Short: "Switch to branches, commits, tags or releases.", 22 Long: ``, 23 Args: cobra.ExactArgs(1), 24 Run: func(cmd *cobra.Command, args []string) { 25 }, 26 } 27 28 var switchBranchCmd = &cobra.Command{ 29 Use: "branch [branchname]", 30 Short: "Switch to branch with branchname.", 31 Long: `If branchname does not exist create branch with branchname. 32 if there are any unsaved changes stash them to @<previousbranchname>. 33 When switching to branch check if there exists a stash and pop the stash. 34 `, 35 Args: cobra.ExactArgs(1), 36 Run: func(cmd *cobra.Command, args []string) { 37 repo, err := gong.Open() 38 if err != nil { 39 cmd.PrintErr(err) 40 return 41 } 42 defer gong.Free(repo) 43 44 branch, err := repo.CheckoutBranch(args[0]) 45 if err != nil { 46 cmd.PrintErr(err) 47 return 48 } 49 defer gong.Free(branch) 50 51 cmd.Printf("checkout to branch %s\n", args[0]) 52 }, 53 } 54 55 var switchCommitCmd = &cobra.Command{ 56 Use: "commit [commithash]", 57 Short: "Switch to commit.", 58 Long: ``, 59 Args: cobra.ExactArgs(1), 60 Run: func(cmd *cobra.Command, args []string) { 61 repo, err := gong.Open() 62 if err != nil { 63 cmd.PrintErr(err) 64 return 65 } 66 defer gong.Free(repo) 67 68 commit, err := repo.CheckoutCommit(args[0]) 69 if err != nil { 70 cmd.PrintErr(err) 71 return 72 } 73 defer gong.Free(commit) 74 75 cmd.Printf("switched to commit %s\n", args[0]) 76 }, 77 } 78 79 var switchTagCmd = &cobra.Command{ 80 Use: "tag [tag]", 81 Short: "Switch to tag.", 82 Long: ``, 83 Args: cobra.ExactArgs(1), 84 Run: func(cmd *cobra.Command, args []string) { 85 repo, err := gong.Open() 86 if err != nil { 87 cmd.PrintErr(err) 88 return 89 } 90 defer gong.Free(repo) 91 92 tag, err := repo.CheckoutTag(args[0]) 93 if err != nil { 94 cmd.PrintErr(err) 95 return 96 } 97 defer gong.Free(tag) 98 99 cmd.Printf("checkout to tag %s\n", tag.Name) 100 }, 101 } 102 103 var switchReleaseCmd = &cobra.Command{ 104 Use: "release [release]", 105 Short: "Switch to release.", 106 Long: ``, 107 Args: cobra.ExactArgs(1), 108 Run: func(cmd *cobra.Command, args []string) { 109 repo, err := gong.Open() 110 if err != nil { 111 cmd.PrintErr(err) 112 return 113 } 114 defer gong.Free(repo) 115 116 tag, err := repo.CheckoutTag(args[0]) 117 if err != nil { 118 cmd.PrintErr(err) 119 return 120 } 121 defer gong.Free(tag) 122 123 cmd.Printf("checkout to release %s\n", tag.Name) 124 }, 125 }