]> Cypherpunks.ru repositories - goredo.git/blobdiff - main.go
Download link for 1.2.0 release
[goredo.git] / main.go
diff --git a/main.go b/main.go
index ed82856be37f842e6c66f9a0607d191388cb40ac..20072155f67c423ac294d82014af923f90f5280d 100644 (file)
--- a/main.go
+++ b/main.go
@@ -1,5 +1,5 @@
 /*
-goredo -- redo implementation on pure Go
+goredo -- djb's redo implementation on pure Go
 Copyright (C) 2020-2021 Sergey Matveev <stargrave@stargrave.org>
 
 This program is free software: you can redistribute it and/or modify
@@ -28,7 +28,6 @@ import (
        "path"
        "path/filepath"
        "strconv"
-       "strings"
 
        "go.cypherpunks.ru/recfile"
 )
@@ -97,11 +96,12 @@ func main() {
        var err error
        Cwd, err = os.Getwd()
        if err != nil {
-               panic(err)
+               log.Fatalln(err)
        }
 
        NoColor = os.Getenv(EnvNoColor) != ""
        NoSync = os.Getenv(EnvNoSync) == "1"
+       InodeTrust = os.Getenv(EnvInodeNoTrust) == ""
 
        TopDir = os.Getenv(EnvTopDir)
        if TopDir == "" {
@@ -178,7 +178,7 @@ func main() {
        if BuildUUID == "" {
                raw := new([16]byte)
                if _, err = io.ReadFull(rand.Reader, raw[:]); err != nil {
-                       panic(err)
+                       log.Fatalln(err)
                }
                raw[6] = (raw[6] & 0x0F) | uint8(4<<4) // version 4
                BuildUUID = fmt.Sprintf(
@@ -270,7 +270,6 @@ CmdSwitch:
                }
                os.Remove(fdTmp.Name())
                cwd, tgt := cwdAndTgt(tgts[0])
-               cwdRel := cwdMustRel(cwd)
                doFile, upLevels, err := findDo(fdTmp, cwd, tgt)
                if err != nil {
                        break
@@ -293,7 +292,17 @@ CmdSwitch:
                if doFile == "" {
                        ok = false
                } else {
-                       fmt.Println(path.Join(cwdRel, strings.Repeat("..", upLevels), doFile))
+                       p := make([]string, 0, upLevels+2)
+                       p = append(p, cwd)
+                       for i := 0; i < upLevels; i++ {
+                               p = append(p, "..")
+                       }
+                       p = append(p, doFile)
+                       rel, err := filepath.Rel(Cwd, path.Join(p...))
+                       if err != nil {
+                               panic(err)
+                       }
+                       fmt.Println(rel)
                }
        default:
                log.Fatalln("unknown command", cmdName)