v1.9.0
IMPROVED: * Removed *BROKEN* dep. lrn2fixurshitk
This commit is contained in:
@@ -12,6 +12,7 @@ import (
|
||||
`github.com/davecgh/go-spew/spew`
|
||||
`github.com/google/shlex`
|
||||
`honnef.co/go/augeas`
|
||||
`r00t2.io/goutils/bitmask`
|
||||
`r00t2.io/sysutils/paths`
|
||||
)
|
||||
|
||||
@@ -146,10 +147,21 @@ breakCmd:
|
||||
An error will be returned if augLens is a nonexistent or not-loaded Augeas lens module.
|
||||
|
||||
Depending on how many files there are and whether globs vs. explicit filepaths are included, this may take a while.
|
||||
*/
|
||||
func (a *Aug) RecursiveInclude(augLens, includeDirective, fsRoot string) (err error) {
|
||||
|
||||
if err = a.addIncl(includeDirective, augLens, fsRoot, nil); err != nil {
|
||||
optFlags may be nil, multiple includeOpt (see the IncludeOpt* constants) as variadic parameters/expanded slice,
|
||||
bitwise-OR'd together, or multiple non-OR'd and OR'd together (all will be combined to a single value).
|
||||
*/
|
||||
func (a *Aug) RecursiveInclude(augLens, includeDirective, fsRoot string, optFlags ...includeOpt) (err error) {
|
||||
|
||||
var flags *bitmask.MaskBit = bitmask.NewMaskBit()
|
||||
|
||||
if optFlags != nil && len(optFlags) > 0 {
|
||||
for _, f := range optFlags {
|
||||
flags.AddFlag(f.toMb())
|
||||
}
|
||||
}
|
||||
|
||||
if err = a.addIncl(includeDirective, augLens, fsRoot, nil, flags); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -164,14 +176,16 @@ func (a *Aug) RecursiveInclude(augLens, includeDirective, fsRoot string) (err er
|
||||
newInclPaths are new filesystem paths/Augeas-compatible glob patterns to load into the filetree and recurse into.
|
||||
They may be nil, especially if the first run.
|
||||
*/
|
||||
func (a *Aug) addIncl(includeDirective, augLens string, fsRoot string, newInclPaths []string) (err error) {
|
||||
func (a *Aug) addIncl(includeDirective, augLens string, fsRoot string, newInclPaths []string, inclFlags *bitmask.MaskBit) (err error) {
|
||||
|
||||
var matches []string // Passed around set of Augeas matches.
|
||||
var exists bool // Used to indicate if the include path exists.
|
||||
var includes []string // Filepath(s)/glob(s) from fetching includeDirective in lensInclPath. These are internal to the application but are recursed.
|
||||
var lensInclPath string // The path of the included paths in the tree. These are internal to Augeas, not the application.
|
||||
var appendPath string // The path for new Augeas includes.
|
||||
var match []string // A placeholder for iterating when populating includes.
|
||||
var fpath string // A placeholder for finding the path of a conf file that contains an includeDirective.
|
||||
var normalizedIncludes []string // A temporary slice to hold normalization operations and other dynamic building.
|
||||
var lensPath string = fmt.Sprintf(augLensTpl, augLens) // The path of the lens (augLens) itself.
|
||||
var augErr *augeas.Error = new(augeas.Error) // We use this to skip "nonexistent" lens.
|
||||
|
||||
@@ -193,7 +207,7 @@ func (a *Aug) addIncl(includeDirective, augLens string, fsRoot string, newInclPa
|
||||
|
||||
// First canonize paths.
|
||||
if newInclPaths != nil && len(newInclPaths) > 0 {
|
||||
// Existing includes. We don't return on an empty lensInclPath because
|
||||
// Existing includes. We don't return on an empty lensInclPath.
|
||||
if matches, err = a.aug.Match(lensInclPath); err != nil {
|
||||
if errors.As(err, augErr) && augErr.Code == augeas.NoMatch {
|
||||
err = nil
|
||||
@@ -221,6 +235,17 @@ func (a *Aug) addIncl(includeDirective, augLens string, fsRoot string, newInclPa
|
||||
// We don't want to bother adding multiple incl's for the same path(s); it can negatively affect Augeas loads.
|
||||
newInclPaths = dedupePaths(newInclPaths, matches)
|
||||
|
||||
// And then apply things like recursion, globbing, etc.
|
||||
normalizedIncludes = make([]string, 0, len(newInclPaths))
|
||||
if inclFlags.HasFlag(IncludeOptGlobbing.toMb()) {
|
||||
// TODO
|
||||
/*
|
||||
if strings.Contains(newInclPaths[idx], "*") {
|
||||
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
// Add the new path(s) as Augeas include entries.
|
||||
if newInclPaths != nil {
|
||||
for _, fsPath := range newInclPaths {
|
||||
@@ -285,10 +310,13 @@ func (a *Aug) addIncl(includeDirective, augLens string, fsRoot string, newInclPa
|
||||
}
|
||||
|
||||
if matches != nil && len(matches) != 0 {
|
||||
if err = a.addIncl(includeDirective, augLens, fsRoot, matches); err != nil {
|
||||
if err = a.addIncl(includeDirective, augLens, fsRoot, matches, inclFlags); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// TODO
|
||||
_, _ = exists, normalizedIncludes
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user