Add a new generic container registry client via a new `container` package. Use this to create a command line utility as well as a new upload target for container registries. The code uses the github.com/containers/* project and packages to interact with container registires that is also used by skopeo, podman et al. One if the dependencies is `proglottis/gpgme` that is using cgo to bind libgpgme, so we have to add the corresponding devel package to the BuildRequires as well as installing it on CI. Checks will follow later via an integration test.
29 lines
706 B
Go
29 lines
706 B
Go
// Copyright 2014-2021 Ulrich Kunitz. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package hash
|
|
|
|
// Roller provides an interface for rolling hashes. The hash value will become
|
|
// valid after hash has been called Len times.
|
|
type Roller interface {
|
|
Len() int
|
|
RollByte(x byte) uint64
|
|
}
|
|
|
|
// Hashes computes all hash values for the array p. Note that the state of the
|
|
// roller is changed.
|
|
func Hashes(r Roller, p []byte) []uint64 {
|
|
n := r.Len()
|
|
if len(p) < n {
|
|
return nil
|
|
}
|
|
h := make([]uint64, len(p)-n+1)
|
|
for i := 0; i < n-1; i++ {
|
|
r.RollByte(p[i])
|
|
}
|
|
for i := range h {
|
|
h[i] = r.RollByte(p[i+n-1])
|
|
}
|
|
return h
|
|
}
|