Exemple #1
0
func (b *buildFile) addContext(container *env.Container, orig, dest string) error {
	origPath := path.Join(b.context, orig)
	destPath := path.Join(container.RootfsPath(), dest)

	// Preserve the trailing '/'
	if strings.HasSuffix(dest, "/") {
		destPath = destPath + "/"
	}

	fi, err := os.Stat(origPath)
	if err != nil {
		return err
	}

	if fi.IsDir() {
		if err := utils.CopyWithTar(origPath, destPath); err != nil {
			return err
		}
		// First try to unpack the source as an archive
	} else if err := utils.UntarPath(origPath, destPath); err != nil {
		utils.Debugf("Couldn't untar %s to %s: %s", origPath, destPath, err)
		// If that fails, just copy it as a regular file
		if err := os.MkdirAll(path.Dir(destPath), 0755); err != nil {
			return err
		}

		if err := utils.CopyWithTar(origPath, destPath); err != nil {
			return err
		}
	}

	return nil
}