func New(context *config.Context, opts *Options) *Commands { var r *Remote if context != nil { r = NewRemoteContext(context) } stdin, stdout, stderr := os.Stdin, os.Stdout, os.Stderr var logger *log.Logger = nil if opts == nil { logger = log.New(stdin, stdout, stderr) } else { if opts.Quiet { stdout = nil } if stdout != nil { opts.StdoutIsTty = isatty.IsTerminal(stdout.Fd()) } if stdout == nil && opts.Piped { panic("piped requires stdout to be non-nil") } logger = log.New(stdin, stdout, stderr) // should always start with / opts.Path = path.Clean(path.Join("/", opts.Path)) if !opts.Force { ignoresPath := filepath.Join(context.AbsPath, DriveIgnoreSuffix) ignorer, regErr := combineIgnores(ignoresPath) if regErr != nil { logger.LogErrf("combining ignores from path %s and internally: %v\n", ignoresPath, regErr) } opts.Ignorer = ignorer } } return &Commands{ context: context, rem: r, opts: opts, log: logger, mkdirAllCache: expirableCache.New(), } }
func _warnChangeStopper(logy *log.Logger, items []*Change, perItemPrefix, fmt_ string, args ...interface{}) { logy.LogErrf(fmt_, args...) for _, item := range items { if item != nil { fileId := "" if item.Src != nil && item.Src.Id != "" { fileId = item.Src.Id } else if item.Dest != nil && item.Dest.Id != "" { fileId = item.Dest.Id } logy.LogErrln(perItemPrefix, item.Path, fileId) } } }
func warnConflictsPersist(logy *log.Logger, conflicts []*Change) { logy.LogErrf("These %d file(s) would be overwritten. Use -%s to override this behaviour\n", len(conflicts), CLIOptionIgnoreConflict) for _, conflict := range conflicts { logy.LogErrln(conflict.Path) } }