in tools/build_tar/buildtar.go [443:552]
func newFileMeta(
mode string,
modes multiString,
owner string,
owners multiString,
ownerName string,
ownerNames multiString,
modTime time.Time,
) fileMeta {
meta := fileMeta{
modTime: modTime,
}
if mode != "" {
i, err := strconv.ParseUint(mode, 8, 32)
if err != nil {
klog.Fatalf("couldn't parse mode: %v", mode)
}
meta.defaultMode = os.FileMode(i)
}
meta.modeMap = map[string]os.FileMode{}
for _, filemode := range modes {
parts := strings.SplitN(filemode, "=", 2)
if len(parts) != 2 {
klog.Fatalf("expected two parts to %q", filemode)
}
if parts[0][0] == '/' {
parts[0] = parts[0][1:]
}
i, err := strconv.ParseUint(parts[1], 8, 32)
if err != nil {
klog.Fatalf("couldn't parse mode: %v", filemode)
}
meta.modeMap[parts[0]] = os.FileMode(i)
}
if ownerName != "" {
parts := strings.SplitN(ownerName, ".", 2)
if len(parts) != 2 {
klog.Fatalf("expected two parts to %q", ownerName)
}
meta.defaultUname = parts[0]
meta.defaultGname = parts[1]
}
meta.unameMap = map[string]string{}
meta.gnameMap = map[string]string{}
for _, name := range ownerNames {
parts := strings.SplitN(name, "=", 2)
if len(parts) != 2 {
klog.Fatalf("expected two parts to %q %v", name, parts)
}
filename, ownername := parts[0], parts[1]
parts = strings.SplitN(ownername, ".", 2)
if len(parts) != 2 {
klog.Fatalf("expected two parts to %q", name)
}
uname, gname := parts[0], parts[1]
meta.unameMap[filename] = uname
meta.gnameMap[filename] = gname
}
if owner != "" {
parts := strings.SplitN(owner, ".", 2)
if len(parts) != 2 {
klog.Fatalf("expected two parts to %q", owner)
}
uid, err := strconv.Atoi(parts[0])
if err != nil {
klog.Fatalf("could not parse uid: %q", parts[0])
}
gid, err := strconv.Atoi(parts[1])
if err != nil {
klog.Fatalf("could not parse gid: %q", parts[1])
}
meta.defaultUID = uid
meta.defaultGID = gid
}
meta.uidMap = map[string]int{}
meta.gidMap = map[string]int{}
for _, owner := range owners {
parts := strings.SplitN(owner, "=", 2)
if len(parts) != 2 {
klog.Fatalf("expected two parts to %q", owner)
}
filename, owner := parts[0], parts[1]
parts = strings.SplitN(parts[1], ".", 2)
if len(parts) != 2 {
klog.Fatalf("expected two parts to %q", owner)
}
uid, err := strconv.Atoi(parts[0])
if err != nil {
klog.Fatalf("could not parse uid: %q", parts[0])
}
gid, err := strconv.Atoi(parts[1])
if err != nil {
klog.Fatalf("could not parse gid: %q", parts[1])
}
meta.uidMap[filename] = uid
meta.gidMap[filename] = gid
}
return meta
}