]> Cypherpunks.ru repositories - goredo.git/blobdiff - main.go
Fix workability under GNU/Linux and other systems because of different syscall
[goredo.git] / main.go
diff --git a/main.go b/main.go
index b5618e649916efac50dc6ca0d6668a330422f80a..1262c57f53c2451a7459384d1f001b0528503ca1 100644 (file)
--- a/main.go
+++ b/main.go
@@ -1,6 +1,6 @@
 /*
 goredo -- redo implementation on pure Go
-Copyright (C) 2020 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2020-2021 Sergey Matveev <stargrave@stargrave.org>
 
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -31,7 +31,6 @@ import (
        "strings"
 
        "go.cypherpunks.ru/recfile"
-       "golang.org/x/sys/unix"
 )
 
 var (
@@ -60,7 +59,7 @@ func mustParseFd(v, name string) *os.File {
 func main() {
        version := flag.Bool("version", false, "print version")
        warranty := flag.Bool("warranty", false, "print warranty information")
-       symlinks := flag.Bool("symlinks", false, "create necessary symlinks in current direcotyr")
+       symlinks := flag.Bool("symlinks", false, "create necessary symlinks in current directory")
 
        flag.Usage = usage
        flag.Parse()
@@ -96,7 +95,7 @@ func main() {
        log.SetFlags(0)
 
        var err error
-       Cwd, err = unix.Getwd()
+       Cwd, err = os.Getwd()
        if err != nil {
                panic(err)
        }
@@ -120,6 +119,9 @@ func main() {
        if *flagStderrSilent {
                mustSetenv(EnvStderrSilent, "1")
        }
+       if *flagNoProgress {
+               mustSetenv(EnvNoProgress, "1")
+       }
        if *flagDebug {
                mustSetenv(EnvDebug, "1")
        }
@@ -137,6 +139,7 @@ func main() {
        }
        StderrKeep = os.Getenv(EnvStderrKeep) == "1"
        StderrSilent = os.Getenv(EnvStderrSilent) == "1"
+       NoProgress = os.Getenv(EnvNoProgress) == "1"
        Debug = os.Getenv(EnvDebug) == "1"
        LogWait = os.Getenv(EnvLogWait) == "1"
        LogLock = os.Getenv(EnvLogLock) == "1"
@@ -170,6 +173,7 @@ func main() {
                fdDep = mustParseFd(v, EnvDepFd)
        }
        BuildUUID = os.Getenv(EnvBuildUUID)
+       tgts := flag.Args()
        if BuildUUID == "" {
                raw := new([16]byte)
                if _, err = io.ReadFull(rand.Reader, raw[:]); err != nil {
@@ -180,13 +184,18 @@ func main() {
                        "%x-%x-%x-%x-%x",
                        raw[0:4], raw[4:6], raw[6:8], raw[8:10], raw[10:],
                )
+               if len(tgts) == 0 {
+                       tgts = []string{"all"}
+               }
        }
        statusInit()
 
-       tgts := flag.Args()
-       if len(tgts) == 0 {
-               tgts = []string{"all"}
+       for i, tgt := range tgts {
+               if path.IsAbs(tgt) {
+                       tgts[i] = cwdMustRel(tgt)
+               }
        }
+
        ok := true
        err = nil
        cmdName := path.Base(os.Args[0])
@@ -255,6 +264,7 @@ CmdSwitch:
                }
                os.Remove(fdTmp.Name())
                cwd, tgt := cwdAndTgt(tgts[0])
+               cwdRel := cwdMustRel(cwd)
                doFile, upLevels, err := findDo(fdTmp, cwd, tgt)
                if err != nil {
                        break
@@ -277,7 +287,7 @@ CmdSwitch:
                if doFile == "" {
                        ok = false
                } else {
-                       fmt.Println(path.Join(strings.Repeat("..", upLevels), doFile))
+                       fmt.Println(path.Join(cwdRel, strings.Repeat("..", upLevels), doFile))
                }
        default:
                log.Fatalln("unknown command", cmdName)