func emptyDir()

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
}