in cmd/hub/git/pull.go [212:269]
func emptyDir(dir string, removeContentIfForced bool) (bool, error) {
dirInfo, err := os.Stat(dir)
if err != nil {
if !util.NoSuchFile(err) {
return false, fmt.Errorf("Unable to stat `%s`: %v", dir, err)
}
return true, nil
}
if !dirInfo.IsDir() {
if config.Force {
err = os.Remove(dir)
if err != nil {
return false, fmt.Errorf("Unable to force remove `%s`: %v", dir, err)
}
} else {
return false, fmt.Errorf("Pull target `%s` is not a directory, add -f / --force to override", dir)
}
}
gitDir := filepath.Join(dir, ".git")
gitInfo, err := os.Stat(gitDir)
if err != nil {
if !util.NoSuchFile(err) {
return false, fmt.Errorf("Unable to stat `%s`: %v", dir, err)
}
dirFD, err := os.Open(dir)
if err != nil {
return false, fmt.Errorf("Unable to open dir `%s`: %v", dir, err)
}
fileNames, err := dirFD.Readdirnames(1)
if err != nil && err != io.EOF {
return false, fmt.Errorf("Unable to read dir `%s`: %v", dir, err)
}
if config.Trace {
log.Printf("Dir content: %v", fileNames)
}
if len(fileNames) > 0 {
if !removeContentIfForced {
return false, nil
}
if config.Force {
err := os.RemoveAll(dir)
if err != nil {
return false, fmt.Errorf("Unable to force clean dir `%s`: %v", dir, err)
}
os.Mkdir(dir, dirMode)
} else {
return false, fmt.Errorf("Pull target `%s` is not an empty directory, add -f / --force to override", dir)
}
}
dirFD.Close()
return true, nil
} else {
if !gitInfo.IsDir() {
return false, fmt.Errorf("Pull target `%s` is not a Git repo", dir)
}
}
return false, nil
}