refactor(tvix/nar-bridge): use storepath for store paths

Remove the handwritten parsing and formatting of store paths.

Change-Id: Ia4ba486b4363c33b98937bcbf6f5f7bcda289b82
Reviewed-on: https://cl.tvl.fyi/c/depot/+/9588
Tested-by: BuildkiteCI
Autosubmit: flokli <flokli@flokli.de>
Reviewed-by: Connor Brewster <cbrewster@hey.com>
This commit is contained in:
Florian Klink 2023-10-09 12:07:51 +02:00 committed by clbot
parent 28cd4b1a2f
commit 78abeaa920

View file

@ -218,25 +218,20 @@ func (p *PathInfoServiceServer) Get(ctx context.Context, getPathInfoRequest *sto
// annotate importedPathInfo with the rest of the metadata from NARINfo.
// extract the output hashes from narInfo.References into importedPathInfo.References.
{
// Length of the hash portion of the store path in base32.
encodedPathHashSize := nixbase32.EncodedLen(20)
for _, referenceStr := range narInfo.References {
if len(referenceStr) < encodedPathHashSize {
return nil, fmt.Errorf("reference string '%s' is too small", referenceStr)
}
decodedReferenceHash, err := nixbase32.DecodeString(referenceStr[0:encodedPathHashSize])
if err != nil {
return nil, fmt.Errorf("unable to decode reference string '%s': %w", referenceStr, err)
}
pathInfo.References = append(pathInfo.References, decodedReferenceHash)
// extract the output digests
for _, referenceStr := range narInfo.References {
referenceStorePath, err := storepath.FromString(referenceStr)
if err != nil {
return nil, fmt.Errorf("unable to parse %s as StorePath: %w", referenceStr, err)
}
pathInfo.References = append(pathInfo.References, referenceStorePath.Digest)
}
// extract narInfo.References into pathInfo.NarInfo.ReferenceNames.
pathInfo.Narinfo.ReferenceNames = narInfo.References
// copy over signatures from narInfo.signatures into pathInfo.NarInfo.Signatures.
for _, signature := range narInfo.Signatures {
pathInfo.Narinfo.Signatures = append(pathInfo.Narinfo.Signatures, &storev1pb.NARInfo_Signature{
Name: signature.Name,
@ -251,15 +246,14 @@ func (p *PathInfoServiceServer) Get(ctx context.Context, getPathInfoRequest *sto
// unreachable due to narInfo.Check()
panic(err)
}
newName := []byte(nixbase32.EncodeToString(outPath.Digest) + "-" + string(outPath.Name))
// set the root name in all three cases.
if node := pathInfo.Node.GetDirectory(); node != nil {
node.Name = newName
node.Name = []byte(outPath.String())
} else if node := pathInfo.Node.GetFile(); node != nil {
node.Name = newName
node.Name = []byte(outPath.String())
} else if node := pathInfo.Node.GetSymlink(); node != nil {
node.Name = newName
node.Name = []byte(outPath.String())
} else {
panic("node may not be nil")
}