Skip to content

Commit

Permalink
feat: v2 (#66)
Browse files Browse the repository at this point in the history
Change description of configuration file, aquifer file
  • Loading branch information
anoriqq committed May 26, 2023
1 parent 96d8571 commit 6408dc7
Show file tree
Hide file tree
Showing 29 changed files with 813 additions and 1,490 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ jobs:
uses: goreleaser/goreleaser-action@v4
with:
version: latest
args: release --rm-dist
args: release --clean
workdir: ./cmd/qpm
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Expand Down
56 changes: 56 additions & 0 deletions cmd/qpm/internal/cmd/aquifer.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package cmd

import (
"fmt"
"os"
"time"

"github.com/anoriqq/qpm/cmd/qpm/internal/config"
"github.com/anoriqq/qpm/cmd/qpm/internal/git"
"github.com/spf13/cobra"
)

func init() {
rootCmd.AddCommand(aquiferCmd)
}

var aquiferCmd = &cobra.Command{
Use: "aquifer",
Short: "Manage aquifer",
}

func init() {
aquiferPullCmd := &cobra.Command{
Use: "pull",
Short: "Get aquifer form remote repository",
RunE: func(_ *cobra.Command, _ []string) error {
path, err := config.InitConfigFile()
if err != nil {
return err
}

c, err := config.ReadConfig(path)
if err != nil {
return err
}

oldDir := fmt.Sprintf("%s.old_%s", c.AquiferPath, time.Now().Format("20060102150405"))
if err := os.Rename(c.AquiferPath, oldDir); err != nil && !os.IsNotExist(err) {
return err
}

cl, err := git.NewClient(c.GitHubUsername, c.GitHubToken)
if err != nil {
return err
}

if err = cl.Clone(c.AquiferPath, c.AquiferRemote.String()); err != nil {
return err
}

return nil
},
}

aquiferCmd.AddCommand(aquiferPullCmd)
}
167 changes: 167 additions & 0 deletions cmd/qpm/internal/cmd/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
package cmd

import (
"fmt"
"net/url"

"github.com/anoriqq/qpm"
"github.com/anoriqq/qpm/cmd/qpm/internal/config"
"github.com/anoriqq/qpm/cmd/qpm/internal/survey"
"github.com/spf13/cobra"
)

func init() {
var isInit bool
var isClear bool

configCmd := &cobra.Command{
Use: "config",
Short: "Manage qpm config",
Example: ` # Set aquifer.path to ~/.qpm
qpm config aquifer.path ~/.qpm`,
Args: cobra.MaximumNArgs(1),
RunE: func(_ *cobra.Command, args []string) error {
if isClear {
return config.ClearConfigFile()
}

path, err := config.InitConfigFile()
if err != nil {
return err
}

if isInit {
current, err := config.ReadConfig(path)
if err != nil {
return err
}
var c qpm.Config
if v, err := SurveyAquiferPath(&current.AquiferPath); err != nil {
return err
} else {
c.AquiferPath = v
}
if v, err := SurveyAquiferRemote(current.AquiferRemote); err != nil {
return err
} else {
c.AquiferRemote = v
}
if v, err := SurveyGitHubUsername(&current.GitHubUsername); err != nil {
return err
} else {
c.GitHubUsername = v
}
if v, err := SurveyGitHubToken(&current.GitHubToken); err != nil {
return err
} else {
c.GitHubToken = v
}
if v, err := SurveyShell(&current.Shell); err != nil {
return err
} else {
c.Shell = v
}
return config.WriteConfig(c, path)
} else {
switch len(args) {
case 0:
fmt.Print(config.StringConfig(path, ""))
return nil
case 1:
fmt.Print(config.StringConfig(path, args[0]))
return nil
default:
return nil
}
}
},
}

configCmd.Flags().BoolVarP(&isInit, "init", "i", false, "Interalcive inisialization")
configCmd.Flags().BoolVarP(&isClear, "clear", "", false, "Clear config file")
rootCmd.AddCommand(configCmd)
}

func SurveyAquiferPath(current *string) (string, error) {
msg := "Please enter qpm aquifer path."

def := "$HOME/.qpm"
if current != nil && *current != "" {
def = *current
}

v, err := survey.AskOneInputRequired(msg, def)
if err != nil {
return "", err
}

return v, nil
}

func SurveyAquiferRemote(current *url.URL) (*url.URL, error) {
msg := "Please enter qpm aquifer repository full URL."

def := ""
if current != nil && current.String() != "" {
def = current.String()
}

raw, err := survey.AskOneInputRequired(msg, def)
if err != nil {
return nil, err
}

v, err := url.Parse(raw)
if err != nil {
return nil, err
}

return v, nil
}

func SurveyGitHubUsername(current *string) (string, error) {
msg := "Please enter GitHub username."

def := ""
if current != nil && *current != "" {
def = *current
}

v, err := survey.AskOneInputRequired(msg, def)
if err != nil {
return "", err
}

return v, nil
}

func SurveyGitHubToken(current *string) (string, error) {
msg := "Please enter GitHub access token. If nothing is enterd, the current config will be taken over."

v, err := survey.AskOnePassword(msg)
if err != nil {
return "", err
}

if current != nil && v == "" {
return *current, nil
}

return v, nil
}

func SurveyShell(current *string) (string, error) {
msg := "Please enter shell command you want to use to execute stratum."

def := "bash"
if current != nil && *current != "" {
def = *current
}

v, err := survey.AskOneInputRequired(msg, def)
if err != nil {
return "", err
}

return v, nil
}
44 changes: 44 additions & 0 deletions cmd/qpm/internal/cmd/install.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package cmd

import (
"github.com/anoriqq/qpm"
"github.com/anoriqq/qpm/cmd/qpm/internal/config"
"github.com/spf13/cobra"
)

func init() {
var aquiferPath string

installCmd := &cobra.Command{
Use: "install",
Short: "Install specifc package",
Example: ` # Install foo package
qpm install foo`,
Args: cobra.RangeArgs(1, 2),
RunE: func(_ *cobra.Command, args []string) error {
path, err := config.InitConfigFile()
if err != nil {
return err
}

c, err := config.ReadConfig(path)
if err != nil {
return err
}

if aquiferPath != "" {
c.AquiferPath = aquiferPath
}

s, err := qpm.ReadStratum(c, args[0])
if err != nil {
return err
}

return qpm.Execute(c, s, qpm.Install)
},
}

installCmd.PersistentFlags().StringVarP(&aquiferPath, "aquifer", "a", "", "Aquifer directory path")
rootCmd.AddCommand(installCmd)
}
16 changes: 16 additions & 0 deletions cmd/qpm/internal/cmd/root.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package cmd

import (
"github.com/anoriqq/qpm"
"github.com/spf13/cobra"
)

var rootCmd = &cobra.Command{
Use: "qpm",
Short: "Qanat Package Manager",
Version: qpm.Version(),
}

func Execute() error {
return rootCmd.Execute()
}
44 changes: 44 additions & 0 deletions cmd/qpm/internal/cmd/uninstall.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package cmd

import (
"github.com/anoriqq/qpm"
"github.com/anoriqq/qpm/cmd/qpm/internal/config"
"github.com/spf13/cobra"
)

func init() {
var aquiferPath string

uninstallCmd := &cobra.Command{
Use: "uninstall",
Short: "Unnstall specifc package",
Example: ` # Uninstall foo package
qpm uninstall foo`,
Args: cobra.RangeArgs(1, 2),
RunE: func(_ *cobra.Command, args []string) error {
path, err := config.InitConfigFile()
if err != nil {
return err
}

c, err := config.ReadConfig(path)
if err != nil {
return err
}

if aquiferPath != "" {
c.AquiferPath = aquiferPath
}

s, err := qpm.ReadStratum(c, args[0])
if err != nil {
return err
}

return qpm.Execute(c, s, qpm.Uninstall)
},
}

uninstallCmd.PersistentFlags().StringVarP(&aquiferPath, "aquifer", "a", "", "Aquifer directory path")
rootCmd.AddCommand(uninstallCmd)
}
Loading

0 comments on commit 6408dc7

Please sign in to comment.