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  }