func main() { flag.Parse() if *rootDir == "" { fmt.Fprintf(os.Stderr, "usage: %s [--verify] --root-dir <docs root>\n", flag.Arg(0)) os.Exit(1) } // Split the root dir of "foo/docs" into "foo" and "docs". We // chdir into "foo" and walk "docs" so the walk is always at a // relative path. stem, leaf := path.Split(strings.TrimRight(*rootDir, "/")) if err := os.Chdir(stem); err != nil { fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) os.Exit(2) } fp := fileProcessor{ munges: wantedMunges(), verifyOnly: *verify, } // For each markdown file under source docs root, process the doc. // - If any error occurs: exit with failure (exit >1). // - If verify is true: exit 0 if no changes needed, exit 1 if changes // needed. // - If verify is false: exit 0 if changes successfully made or no // changes needed, exit 1 if manual changes are needed. var changesNeeded bool err := filepath.Walk(leaf, newWalkFunc(&fp, &changesNeeded)) if err != nil { fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) os.Exit(2) } if changesNeeded { if *verify { fmt.Fprintf(os.Stderr, "FAIL: changes needed but not made due to --verify\n") } else { fmt.Fprintf(os.Stderr, "FAIL: some manual changes are still required.\n") } os.Exit(1) } }
func main() { var err error flag.Parse() if *rootDir == "" { fmt.Fprintf(os.Stderr, "usage: %s [--verify] --root-dir <docs root>\n", flag.Arg(0)) os.Exit(1) } repoRoot = path.Join(*rootDir, *relRoot) repoRoot, err = filepath.Abs(repoRoot) if err != nil { fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) os.Exit(2) } fp := fileProcessor{ munges: wantedMunges(), verifyOnly: *verify, } // For each markdown file under source docs root, process the doc. // - If any error occurs: exit with failure (exit >1). // - If verify is true: exit 0 if no changes needed, exit 1 if changes // needed. // - If verify is false: exit 0 if changes successfully made or no // changes needed, exit 1 if manual changes are needed. var changesNeeded bool err = filepath.Walk(*rootDir, newWalkFunc(&fp, &changesNeeded)) if err != nil { fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) os.Exit(2) } if changesNeeded { if *verify { fmt.Fprintf(os.Stderr, "FAIL: changes needed but not made due to --verify\n") } else { fmt.Fprintf(os.Stderr, "FAIL: some manual changes are still required.\n") } os.Exit(1) } }
func main() { flag.Parse() if *rootDir == "" { fmt.Fprintf(os.Stderr, "usage: %s [--verify] --root-dir <docs root>\n", flag.Arg(0)) os.Exit(1) } // For each markdown file under source docs root, process the doc. // If any error occurs, will exit with failure. // If verify is true, then status is 0 for no changes needed, 1 for changes needed // and >1 for an error during processing. // If verify is false, then status is 0 if changes successfully made or no changes needed, // 1 if changes were needed but require human intervention, and >1 for an unexpected // error during processing. var err error if *verify { err = filepath.Walk(*rootDir, visitAndVerify) } else { err = filepath.Walk(*rootDir, visitAndChange) } if err != nil { if err == ErrChangesNeeded { if *verify { fmt.Fprintf(os.Stderr, "Some changes needed but not made due to --verify=true\n") } else { fmt.Fprintf(os.Stderr, "Some changes needed but human intervention is required\n") } os.Exit(1) } fmt.Fprintf(os.Stderr, "filepath.Walk() returned %v\n", err) os.Exit(2) } }
func main() { var err error flag.Parse() if *rootDir == "" { fmt.Fprintf(os.Stderr, "usage: %s [--verify] --root-dir <docs root>\n", flag.Arg(0)) os.Exit(1) } repoRoot = path.Join(*rootDir, *relRoot) repoRoot, err = filepath.Abs(repoRoot) if err != nil { fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) os.Exit(2) } absRootDir, err := filepath.Abs(*rootDir) if err != nil { fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) os.Exit(2) } inJenkins = len(os.Getenv("JENKINS_HOME")) != 0 out, err := exec.Command("git", "ls-tree", "-r", "--name-only", fmt.Sprintf("%s/%s", "upstream", latestReleaseBranch), absRootDir).CombinedOutput() if err != nil { if inJenkins { fmt.Fprintf(os.Stderr, "output: %s,\nERROR: %v\n", out, err) os.Exit(2) } else { fmt.Fprintf(os.Stdout, "output: %s,\nERROR: %v\n", out, err) fmt.Fprintf(os.Stdout, "`git ls-tree -r --name-only upstream/%s failed. We'll ignore this error locally, but Jenkins may pick an error. Munger uses the output of this command to determine in unversioned warning, if it should add a link to the doc in release branch.\n", latestReleaseBranch) filesInLatestRelease = "" } } else { filesInLatestRelease = string(out) } fp := fileProcessor{ munges: wantedMunges(), verifyOnly: *verify, } // For each markdown file under source docs root, process the doc. // - If any error occurs: exit with failure (exit >1). // - If verify is true: exit 0 if no changes needed, exit 1 if changes // needed. // - If verify is false: exit 0 if changes successfully made or no // changes needed, exit 1 if manual changes are needed. var changesNeeded bool err = filepath.Walk(*rootDir, newWalkFunc(&fp, &changesNeeded)) if err != nil { fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) os.Exit(2) } if changesNeeded { if *verify { fmt.Fprintf(os.Stderr, "FAIL: changes needed but not made due to --verify\n") } else { fmt.Fprintf(os.Stderr, "FAIL: some manual changes are still required.\n") } os.Exit(1) } }