-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcli.go
More file actions
87 lines (72 loc) · 2.8 KB
/
cli.go
File metadata and controls
87 lines (72 loc) · 2.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package main
import (
conf "blanktiger/hm/configuration"
"blanktiger/hm/lib"
)
func cliMain(c *conf.Configuration) error {
lockBefore, err := lib.ReadOrCreateLockfile(c.LockfilePath)
if err != nil {
c.Logger.Info("encountered an error while trying to read an existing lockfile (probably doesnt exist), creating a new one instead", "err", err)
lockBefore = &lib.EmptyLockfile
}
lockAfter, err := lib.CreateLockBasedOnConfigs(c)
if err != nil {
c.Logger.Info("something went wrong while trying to create a new lockfile based on your config files in your source directory", "err", err)
return err
}
// config/DEPENDENCIES file parsing
globalDependencies, err := lib.ParseGlobalDependencies(c.SourceCfgDir)
if err != nil {
c.Logger.Error("couldn't parse global dependencies file", "path", c.SourceCfgDir, "err", err)
return err
}
lockAfter.GlobalDependencies = globalDependencies
lib.CopyInstallInfo(lockBefore, lockAfter)
globalDepsChanged := lib.DidGlobalDependenciesChange(&lockBefore.GlobalDependencies, &lockAfter.GlobalDependencies)
globalDepsInstalled := lib.WereGlobalDependenciesInstalled(&lockAfter.GlobalDependencies)
if c.Install || c.OnlyInstall || c.Upgrade {
if globalDepsChanged || !globalDepsInstalled || c.Upgrade {
err = lib.InstallGlobalDependencies(&lockAfter.GlobalDependencies)
if err != nil {
lib.Logger.Error("something went wrong while trying to install global dependencies", "err", err)
return err
}
} else {
lib.Logger.Info("global dependencies didn't change since last installation, not installing", "depsChanged", globalDepsChanged, "previouslyInstalled", globalDepsInstalled)
}
}
if !c.OnlyUninstall && !c.OnlyInstall {
toSymlink := lockAfter.Configs
if c.CopyMode {
err = lib.Copy(c, toSymlink)
} else {
err = lib.Symlink(c, toSymlink)
}
if err != nil {
c.Logger.Error("encountered an error while copying/symlinking", "error", err)
return err
}
toRemove := lockAfter.HiddenConfigs
err = lib.Remove(c, toRemove)
} else {
lib.Logger.Info("skipping copying/symlinking the config, because --only-install or --only-uninstall was passed")
}
if (c.Install || c.OnlyInstall || c.Upgrade) && !c.OnlyUninstall {
infoForUpdate := lib.Install(lockAfter)
lockAfter.UpdateInstallInfo(infoForUpdate)
}
if (c.Uninstall || c.OnlyUninstall) && !c.OnlyInstall {
infoForUpdate := lib.Uninstall(lockAfter)
lockAfter.UpdateInstallInfo(infoForUpdate)
}
err = lockAfter.Save(c.LockfilePath, c.DefaultIndent)
if err != nil {
lib.Logger.Error("something went wrong while trying to save the lockfile", "err", err)
}
diff := lib.DiffLocks(*lockBefore, *lockAfter)
err = diff.Save(c.LockfileDiffPath, c.DefaultIndent)
if err != nil {
lib.Logger.Error("something went wrong while trying to save the lockfile diff", "err", err)
}
return nil
}