예제 #1
0
func addPrevious(hist string, lhash string, sh *shell.Shell) (string, error) {
	b, err := ioutil.ReadFile(hist)
	if err != nil {
		return "", err
	}
	var vhash string
	s := bufio.NewScanner(strings.NewReader(string(b)))
	for s.Scan() {
		vhash = s.Text()
	}

	nhash, err := sh.PatchLink(lhash, "previous", vhash, true)
	if err != nil {
		return "", err
	}
	return nhash, nil
}
예제 #2
0
파일: main.go 프로젝트: ipfs/refs
func addSkeleton(sh *shell.Shell, dmca string) (string, error) {
	hdenylists, err := sh.NewObject("unixfs-dir")
	if err != nil {
		return "", err
	}
	hdenylists, err = sh.PatchLink(hdenylists, "dmca", dmca, true)
	if err != nil {
		return "", err
	}
	hlists, err := sh.NewObject("unixfs-dir")
	if err != nil {
		return "", err
	}
	hlists, err = sh.PatchLink(hlists, "denylists", hdenylists, true)
	if err != nil {
		return "", err
	}
	hroot, err := sh.NewObject("unixfs-dir")
	if err != nil {
		return "", err
	}
	hroot, err = sh.PatchLink(hroot, "lists", hlists, true)
	if err != nil {
		return "", err
	}
	return hroot, nil
}
예제 #3
0
파일: main.go 프로젝트: ipfs/refs
func addPrevious(sh *shell.Shell, h string, c string) (string, error) {
	cur, err := sh.ResolvePath(c)
	if err != nil {
		log.Fatalf("could not resolve current version: %s", err)
	}
	prev, err := sh.ResolvePath(c + "/previous")
	if err == nil {
		h, err = sh.PatchLink(h, "previous", prev, true)
		if err != nil {
			return "", err
		}
	}

	if h != cur {
		h, err = sh.PatchLink(h, "previous", cur, true)
		if err != nil {
			return "", err
		}
	}

	return h, nil
}
예제 #4
0
func addDenylist(srcpath string, sh *shell.Shell) (string, error) {
	srcdir, err := os.Open(srcpath)
	if err != nil {
		return "", err
	}

	ndirs, err := srcdir.Readdir(0)
	if err != nil {
		return "", err
	}

	lhash, err := sh.NewObject("unixfs-dir")
	if err != nil {
		return "", err
	}

	for _, dir := range ndirs {
		omit := regexp.MustCompile(`\A(\.|node_modules|versions)`)
		if !dir.IsDir() || omit.Match([]byte(dir.Name())) {
			continue
		}

		keys, nreader, err := keysAndNotice(srcdir.Name() + "/" + dir.Name())
		if err != nil {
			return "", err
		}

		nhash, err := sh.Add(nreader)
		if err != nil {
			return "", err
		}

		for _, k := range keys {
			dhash, err := sh.NewObject("unixfs-dir")
			if err != nil {
				return "", err
			}

			dhash, err = sh.PatchLink(dhash, "notice", nhash, true)
			if err != nil {
				return "", err
			}

			dhash, err = sh.PatchLink(dhash, "object", k, true)
			if err != nil {
				return "", err
			}

			link := fmt.Sprintf("%s-%s", dir.Name(), k)
			lhash, err = sh.PatchLink(lhash, link, dhash, true)
			if err != nil {
				return "", err
			}
		}
	}

	return lhash, nil
}
예제 #5
0
파일: dmca.go 프로젝트: ipfs/refs
func addDenylist(srcpath string, sh *shell.Shell) (string, error) {
	dirs, err := AssetDir(srcpath)
	if err != nil {
		return "", err
	}

	h, err := sh.NewObject("unixfs-dir")
	if err != nil {
		return "", err
	}

	for _, dirname := range dirs {
		keys, nreader, err := keysAndNotice(srcpath + "/" + dirname)
		if err != nil {
			return "", err
		}

		n, err := sh.Add(nreader)
		if err != nil {
			return "", err
		}

		for i, k := range keys {
			n, err = sh.PatchLink(n, fmt.Sprintf("object-%d", i), k, true)
			if err != nil {
				return "", err
			}
		}

		h, err = sh.PatchLink(h, dirname, n, true)
		if err != nil {
			return "", err
		}
	}

	return h, nil
}