| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package main
- import (
- "bufio"
- "fmt"
- "os"
- "os/exec"
- "strings"
- "time"
- )
- func isGitRepo() bool {
- cmd := exec.Command("git", "rev-parse", "--git-dir")
- return cmd.Run() == nil
- }
- func hasUncommittedChanges() bool {
- cmd := exec.Command("git", "diff-index", "--quiet", "HEAD", "--")
- return cmd.Run() != nil
- }
- func getCurrentBranch() (string, error) {
- cmd := exec.Command("git", "branch", "--show-current")
- output, err := cmd.Output()
- if err != nil {
- return "", err
- }
- return strings.TrimSpace(string(output)), nil
- }
- func handlePush() error {
- log("Preparing to push repository...")
- if !isGitRepo() {
- errorLog("Not in a git repository")
- return fmt.Errorf("not in git repo")
- }
- if hasUncommittedChanges() {
- warn("You have uncommitted changes")
- fmt.Println()
- cmd := exec.Command("git", "status", "--short")
- cmd.Stdout = os.Stdout
- cmd.Run()
- fmt.Println()
- defaultMsg := fmt.Sprintf("dev: automated commit - %s", time.Now().Format("2006-01-02 15:04:05"))
- fmt.Print("Commit all changes? (Y/n): ")
- reader := bufio.NewReader(os.Stdin)
- answer, _ := reader.ReadString('\n')
- answer = strings.TrimSpace(strings.ToLower(answer))
- if answer != "n" && answer != "no" {
- fmt.Println()
- fmt.Printf("Default: %s\n", defaultMsg)
- fmt.Print("Custom commit message (or press Enter for default): ")
- commitMsg, _ := reader.ReadString('\n')
- commitMsg = strings.TrimSpace(commitMsg)
- if commitMsg == "" {
- commitMsg = defaultMsg
- }
- if err := exec.Command("git", "add", ".").Run(); err != nil {
- return fmt.Errorf("failed to add changes: %v", err)
- }
- if err := exec.Command("git", "commit", "-m", commitMsg).Run(); err != nil {
- return fmt.Errorf("failed to commit changes: %v", err)
- }
- log("✓ Changes committed: %s", commitMsg)
- }
- }
- if err := runSecurityScan(); err != nil {
- return err
- }
- branch, err := getCurrentBranch()
- if err != nil {
- return fmt.Errorf("failed to get current branch: %v", err)
- }
- log("Pushing branch '%s' to origin...", branch)
- cmd := exec.Command("git", "push", "origin", branch)
- if err := cmd.Run(); err != nil {
- errorLog("❌ Push failed")
- return fmt.Errorf("push failed")
- }
- log("✅ Successfully pushed to origin/%s", branch)
- return nil
- }
|