Skip to content

Commit

Permalink
✨ Save command created
Browse files Browse the repository at this point in the history
  • Loading branch information
julien040 committed Dec 26, 2022
1 parent bbd2a80 commit a8eb0c8
Show file tree
Hide file tree
Showing 10 changed files with 372 additions and 14 deletions.
9 changes: 5 additions & 4 deletions cmd/save.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ THE SOFTWARE.
package cmd

import (
"fmt"
"github.com/julien040/gut/src/controller"

"github.com/spf13/cobra"
)
Expand All @@ -31,13 +31,14 @@ import (
var saveCmd = &cobra.Command{
Use: "save",
Short: "Save your current work locally",
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("save called")
},
Run: controller.Save,
}

func init() {
rootCmd.AddCommand(saveCmd)
saveCmd.Flags().StringP("message", "m", "", "The commit message")
saveCmd.Flags().StringP("profile", "p", "", "The ID of the profile to use")
saveCmd.Flags().StringP("title", "t", "", "The title of the commit")

// Here you will define your flags and configuration settings.

Expand Down
9 changes: 7 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,20 @@ go 1.19

require (
github.com/99designs/keyring v1.2.2
github.com/AlecAivazis/survey/v2 v2.3.6
github.com/BurntSushi/toml v1.2.1
github.com/briandowns/spinner v1.20.0
github.com/fatih/color v1.13.0
github.com/go-git/go-git v4.7.0+incompatible
github.com/go-git/go-git/v5 v5.5.1
github.com/gookit/config/v2 v2.1.8
github.com/matoous/go-nanoid/v2 v2.0.0
github.com/spf13/cobra v1.6.1
github.com/BurntSushi/toml v1.2.1
)

require (
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
)

require (
Expand All @@ -21,7 +27,6 @@ require (

require (
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect

github.com/Microsoft/go-winio v0.5.2 // indirect
github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 // indirect
github.com/acomagu/bufpipe v1.0.3 // indirect
Expand Down
14 changes: 14 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,14 @@ github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMb
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4=
github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0=
github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk=
github.com/AlecAivazis/survey/v2 v2.3.6 h1:NvTuVHISgTHEHeBFqt6BHOe4Ny/NwGZr7w+F8S9ziyw=
github.com/AlecAivazis/survey/v2 v2.3.6/go.mod h1:4AuI9b7RjAR+G7v9+C4YSlX/YL3K3cWNXgWXOhllqvI=
github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=
github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA=
github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s=
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w=
github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 h1:ra2OtmuW0AE5csawV4YXMNGNQQXvLRps3z2Z59OPO+I=
github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8=
github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk=
Expand Down Expand Up @@ -35,6 +39,8 @@ github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtM
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/creack/pty v1.1.17 h1:QeVUsEDNrLBW4tMgZHvxy18sKtr6VI492kBhUfhDJNI=
github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0=
github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
Expand Down Expand Up @@ -87,6 +93,8 @@ github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hashicorp/hcl/v2 v2.14.1/go.mod h1:e4z5nxYlWNPdDSNYX+ph14EvWYMFm3eP0zIUqPc2jr0=
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog=
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68=
github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk=
github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg=
github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc=
Expand All @@ -96,6 +104,8 @@ github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
Expand Down Expand Up @@ -123,6 +133,8 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
Expand Down Expand Up @@ -226,6 +238,7 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
Expand All @@ -237,6 +250,7 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ=
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
Expand Down
2 changes: 1 addition & 1 deletion src/controller/clone.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,6 @@ func cloneRepoNeedsAuth(repo string, path string, shouldConserveGitHistory bool)
exitOnError("We couldn't clone the repo 😓. Please make sure you have the right permissions", err)
} else {
print.Message("Your repo has been cloned successfully 🎉 at "+path, print.Success)
associateProfileToPath(profile.Id, path)
associateProfileToPath(profile, path)
}
}
43 changes: 36 additions & 7 deletions src/controller/profile.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (

"github.com/BurntSushi/toml"
"github.com/fatih/color"
"github.com/julien040/gut/src/executor"
"github.com/julien040/gut/src/print"
"github.com/julien040/gut/src/profile"
"github.com/julien040/gut/src/prompt"
Expand Down Expand Up @@ -168,9 +169,13 @@ func ProfilesList(cmd *cobra.Command, args []string) {
}
}
}
func associateProfileToPath(profileID string, path string) {
func associateProfileToPath(profile profile.Profile, path string) {
// Set Profile Data in git config
executor.SetUserConfig(path, profile.Username, profile.Email)

// Get current date
currentDate := time.Now().Format("2006-01-02 15:04:05")

// Check if file exists
pathToWrite := filepath.Join(path, ".gut")
if _, err := os.Stat(pathToWrite); os.IsNotExist(err) {
Expand All @@ -181,33 +186,57 @@ func associateProfileToPath(profileID string, path string) {
}
f.Close()
}

// Open file in write mode
f, err := os.OpenFile(pathToWrite,
os.O_WRONLY|os.O_TRUNC, 0755)
if err != nil {
exitOnError("We can't open the file .gut at "+pathToWrite, err)
}

// Close file at the end of the function
defer f.Close()

// Create the schema
profileIDSchema := SchemaGutConf{
ProfileID: profileID,
ProfileID: profile.Id,
UpdatedAt: currentDate,
}

// Encode ID in TOML
// Encode ID in TOML and write it in .gut file
t := toml.NewEncoder(f)
err = t.Encode(profileIDSchema)
if err != nil {
exitOnError("We can't encode in TOML", err)
}

// Write profile id in the file
/* _, err = f.WriteString(profileID)
}

func getProfileIDFromPath(path string) string {
// Open file in read mode
f, err :=
os.OpenFile(filepath.Join(path, ".gut"),
os.O_RDONLY, 0755)

if err != nil {
exitOnError("We can't write in the file .gutconf at "+pathToWrite, err)
} */
defer f.Close()
return ""

} else {
defer f.Close()
// Close file at the end of the function

// Create the schema
profileIDSchema := SchemaGutConf{}

// Decode ID in TOML
t := toml.NewDecoder(f)
_, err = t.Decode(&profileIDSchema)
if err != nil {
exitOnError("We can't decode in TOML", err)
}
return profileIDSchema.ProfileID
}

}

Expand Down
174 changes: 174 additions & 0 deletions src/controller/save.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
package controller

import (
"errors"
"fmt"

"os"

"github.com/AlecAivazis/survey/v2"
"github.com/julien040/gut/src/executor"
"github.com/julien040/gut/src/print"
"github.com/spf13/cobra"
)

type Emoji struct {
Emoji string
Code string
Description string
}

var GitEmoji = []Emoji{
{"🎉", ":tada:", "Initial commit"},
{"✨", ":sparkles:", "Introduce new features"},
{"🐛", ":bug:", "Fix a bug"},
{"🔥", ":fire:", "Remove code or files"},
{"🚑", ":ambulance:", "Critical hotfix"},
{"📝", ":memo:", "Add or update documentation"},
{"🎨", ":art:", "Improve the format/structure of the code"},
{"⚡️", ":zap:", "Improve performance"},
{"🔒", ":lock:", "Fix security issues"},
{"🔖", ":bookmark:", "Release / Version tags"},
{"🚀", ":rocket:", "Deploy stuff"},
{"💄", ":lipstick:", "Add or update the UI and style files"},
{"🎨", ":art:", "Improve structure / format of the code"},
{"🚧", ":construction:", "Work in progress"},
{"💚", ":green_heart:", "Fix CI Build"},
{"⬇️", ":arrow_down:", "Downgrade dependencies"},
{"⬆️", ":arrow_up:", "Upgrade dependencies"},
{"📌", ":pushpin:", "Pin dependencies to specific versions"},
{"♻️", ":recycle:", "Refactor code"},
{"➖", ":heavy_minus_sign:", "Remove a dependency"},
{"🐧", ":penguin:", "Fix something on Linux"},
{"🍎", ":apple:", "Fix something on macOS"},
{"🏁", ":checkered_flag:", "Fix something on Windows"},
{"🤖", ":robot:", "Fix something on Android"},
{"🍏", ":green_apple:", "Fix something on iOS"},
{"🔧", ":wrench:", "Add or update configuration files"},
{"🌐", ":globe_with_meridians:", "Internationalization and localization"},
{"✏️", ":pencil2:", "Fix typos"},
{"💩", ":poop:", "Write bad code that needs to be improved"},
{"⏪", ":rewind:", "Revert changes"},
{"🔀", ":twisted_rightwards_arrows:", "Merge branches"},
{"📦", ":package:", "Add or update compiled files or packages"},
{"👽", ":alien:", "Update code due to external API changes"},
{"🚚", ":truck:", "Move or rename resources (e.g.: files, paths, routes)"},
{"📄", ":page_facing_up:", "Add or update license"},
{"💥", ":boom:", "Introduce breaking changes"},
{"🍱", ":bento:", "Add or update assets"},
{"♿️", ":wheelchair:", "Improve accessibility"},
{"💡", ":bulb:", "Add or update comments in source code"},
{"🍻", ":beers:", "Write code drunkenly"},
{"💬", ":speech_balloon:", "Add or update text and literals"},
{"🗃", ":card_file_box:", "Perform database related changes"},
{"🔊", ":loud_sound:", "Add or update logs"},
{"🔇", ":mute:", "Remove logs"},
{"👥", ":busts_in_silhouette:", "Add or update contributor(s)"},
{"🚸", ":children_crossing:", "Improve user experience / usability"},
{"🏗", ":building_construction:", "Make architectural changes"},
{"📱", ":iphone:", "Work on responsive design"},
{"🤡", ":clown_face:", "Mock things"},
{"🥚", ":egg:", "Add or update an easter egg"},
{"🙈", ":see_no_evil:", "Add or update a .gitignore file"},
{"📸", ":camera_flash:", "Add or update snapshots"},
{"⚗", ":alembic:", "Experiment new things"},
{"🔍", ":mag:", "Improve SEO"},
{"🏷", ":label:", "Add or update types (Flow, TypeScript)"},
{"🌱", ":seedling:", "Add or update seed files"},
{"🚩", ":triangular_flag_on_post:", "Add, update, or remove feature flags"},
{"🥅", ":goal_net:", "Catch errors"},
{"💫", ":dizzy:", "Add or update animations and transitions"},
{"🗑", ":wastebasket:", "Deprecate code that needs to be cleaned up"},
{"🛂", ":passport_control:", "Work on code related to authorization"},
{"🩹", ":adhesive_bandage:", "Simple fix for a non-critical issue"},
{"🔖", ":bookmark_tabs:", "Release / Version tags"},
{"👷", ":construction_worker:", "Add or update CI build system"},
{"💸", ":moneybag:", "Add or update financial, legal, or business documentation"},
{"📦", ":package:", "Add or update compiled files or packages"},
{"🦺", ":safety_vest:", "Add or update security"},
{"📈", ":chart_with_upwards_trend:", "Add or update analytics or track code"},
}

func Save(cmd *cobra.Command, args []string) {
wd, err := os.Getwd()
if err != nil {
exitOnError("We're not able to get the current directory", err)
}
if !executor.IsPathGitRepo(wd) {
exitOnError("Sorry, this is not a git repository. Init a git repo with `gut init`", errors.New(""))
}
title := cmd.Flag("title").Value.String()
message := cmd.Flag("message").Value.String()
var answers struct {
Type int
Titre string
Description string
}

var qs = []*survey.Question{
{
Name: "Type",
Prompt: &survey.Select{Message: "Select an emoji:", Options: emojiList(), PageSize: 12, Help: "Select an emoji to describe your commit"},
Validate: survey.Required,
},
}
if title == "" || len(title) > 50 {
qs = append(qs, &survey.Question{
Name: "Titre",
Prompt: &survey.Input{Message: "What describes best your commit? (max 50 chars)", Help: "Write a short description of your commit (max 50 chars)"},
Validate: titleValidation,
})
} else {
answers.Titre = title
}
if message == "" {
qs = append(qs, &survey.Question{
Name: "Description",
Prompt: &survey.Multiline{Message: "Describe your commit (optional)", Help: "Write a description of your commit (optional)"},
},
)
} else {
answers.Description = message
}

err = survey.Ask(qs, &answers)
if err != nil {
exitOnError("Error while asking questions", err)
}
commitMessage := computeCommitMessage(answers)
Result, err := executor.Commit(wd, commitMessage)
if err != nil {
exitOnError("Error while committing", err)
}
print.Message("Changes updated successfully with commit hash: "+Result.Hash, print.Success)
fmt.Printf("%d files changed, %d insertions(+), %d deletions(-)", Result.FilesUpdated, Result.FilesAdded, Result.FilesDeleted)

}

func emojiList() []string {
var emojis []string
for _, e := range GitEmoji {
emojis = append(emojis, e.Emoji+" "+e.Description)
}
return emojis
}

func titleValidation(s interface{}) error {
val, ok := s.(string)
if !ok || len(val) == 0 {
return errors.New("for easy retrieval, don't forget to add a title")
} else if len(val) > 50 {
return errors.New("it's recommended to keep the title under 50 characters")
}
return nil
}

func computeCommitMessage(answers struct {
Type int
Titre string
Description string
}) string {
var message string
message += GitEmoji[answers.Type].Emoji + " " + answers.Titre + "\n" + answers.Description
return message
}
Loading

0 comments on commit a8eb0c8

Please sign in to comment.