Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Another bunch of warning cleanups #1364

Merged
merged 18 commits into from
Oct 17, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 52 additions & 66 deletions cmd/containers-storage/container.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package main

import (
"encoding/json"
"fmt"
"io"
"os"
Expand All @@ -14,11 +13,10 @@ var (
paramContainerDataFile = ""
)

func container(flags *mflag.FlagSet, action string, m storage.Store, args []string) int {
func container(flags *mflag.FlagSet, action string, m storage.Store, args []string) (int, error) {
images, err := m.Images()
if err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
return 1, err
}
matches := []*storage.Container{}
for _, arg := range args {
Expand All @@ -27,7 +25,9 @@ func container(flags *mflag.FlagSet, action string, m storage.Store, args []stri
}
}
if jsonOutput {
json.NewEncoder(os.Stdout).Encode(matches)
if _, err := outputJSON(matches); err != nil {
return 1, err
}
} else {
for _, container := range matches {
fmt.Printf("ID: %s\n", container.ID)
Expand Down Expand Up @@ -56,140 +56,125 @@ func container(flags *mflag.FlagSet, action string, m storage.Store, args []stri
}
}
if len(matches) != len(args) {
return 1
return 1, nil
}
return 0
return 0, nil
}

func listContainerBigData(flags *mflag.FlagSet, action string, m storage.Store, args []string) int {
func listContainerBigData(flags *mflag.FlagSet, action string, m storage.Store, args []string) (int, error) {
container, err := m.Container(args[0])
if err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
return 1, err
}
d, err := m.ListContainerBigData(container.ID)
if err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
return 1, err
}
if jsonOutput {
json.NewEncoder(os.Stdout).Encode(d)
} else {
for _, name := range d {
fmt.Printf("%s\n", name)
}
return outputJSON(d)
}
return 0
for _, name := range d {
fmt.Printf("%s\n", name)
}
return 0, nil
}

func getContainerBigData(flags *mflag.FlagSet, action string, m storage.Store, args []string) int {
func getContainerBigData(flags *mflag.FlagSet, action string, m storage.Store, args []string) (int, error) {
container, err := m.Container(args[0])
if err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
return 1, err
}
output := os.Stdout
if paramContainerDataFile != "" {
f, err := os.Create(paramContainerDataFile)
if err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
return 1
return 1, err
}
output = f
}
b, err := m.ContainerBigData(container.ID, args[1])
if err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
return 1, err
}
if _, err := output.Write(b); err != nil {
return 1, err
}
output.Write(b)
output.Close()
return 0
return 0, nil
}

func getContainerBigDataSize(flags *mflag.FlagSet, action string, m storage.Store, args []string) int {
func getContainerBigDataSize(flags *mflag.FlagSet, action string, m storage.Store, args []string) (int, error) {
container, err := m.Container(args[0])
if err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
return 1, err
}
size, err := m.ContainerBigDataSize(container.ID, args[1])
if err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
return 1, err
}
fmt.Fprintf(os.Stdout, "%d\n", size)
return 0
return 0, nil
}

func getContainerBigDataDigest(flags *mflag.FlagSet, action string, m storage.Store, args []string) int {
func getContainerBigDataDigest(flags *mflag.FlagSet, action string, m storage.Store, args []string) (int, error) {
container, err := m.Container(args[0])
if err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
return 1, err
}
d, err := m.ContainerBigDataDigest(container.ID, args[1])
if err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
return 1, err
}
if d.Validate() != nil {
fmt.Fprintf(os.Stderr, "%v\n", d.Validate())
return 1
if err := d.Validate(); err != nil {
return 1, err
}
fmt.Fprintf(os.Stdout, "%s\n", d.String())
return 0
return 0, nil
}

func setContainerBigData(flags *mflag.FlagSet, action string, m storage.Store, args []string) int {
func setContainerBigData(flags *mflag.FlagSet, action string, m storage.Store, args []string) (int, error) {
container, err := m.Container(args[0])
if err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
return 1, err
}
input := os.Stdin
if paramContainerDataFile != "" {
f, err := os.Open(paramContainerDataFile)
if err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
return 1
return 1, err
}
input = f
}
b, err := io.ReadAll(input)
if err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
return 1
return 1, err
}
err = m.SetContainerBigData(container.ID, args[1], b)
if err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
return 1, err
}
return 0
return 0, nil
}

func getContainerDir(flags *mflag.FlagSet, action string, m storage.Store, args []string) int {
func getContainerDir(flags *mflag.FlagSet, action string, m storage.Store, args []string) (int, error) {
path, err := m.ContainerDirectory(args[0])
if err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
return 1, err
}
fmt.Printf("%s\n", path)
return 0
return 0, nil
}

func getContainerRunDir(flags *mflag.FlagSet, action string, m storage.Store, args []string) int {
func getContainerRunDir(flags *mflag.FlagSet, action string, m storage.Store, args []string) (int, error) {
path, err := m.ContainerRunDirectory(args[0])
if err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
return 1, err
}
fmt.Printf("%s\n", path)
return 0
return 0, nil
}

func containerParentOwners(flags *mflag.FlagSet, action string, m storage.Store, args []string) int {
func containerParentOwners(flags *mflag.FlagSet, action string, m storage.Store, args []string) (int, error) {
matched := []*storage.Container{}
for _, arg := range args {
if container, err := m.Container(arg); err == nil {
Expand All @@ -199,8 +184,7 @@ func containerParentOwners(flags *mflag.FlagSet, action string, m storage.Store,
for _, container := range matched {
uids, gids, err := m.ContainerParentOwners(container.ID)
if err != nil {
fmt.Fprintf(os.Stderr, "ContainerParentOwner: %+v\n", err)
return 1
return 1, fmt.Errorf("ContainerParentOwner: %+v", err)
}
if jsonOutput {
mappings := struct {
Expand All @@ -212,17 +196,19 @@ func containerParentOwners(flags *mflag.FlagSet, action string, m storage.Store,
UIDs: uids,
GIDs: gids,
}
json.NewEncoder(os.Stdout).Encode(mappings)
if _, err := outputJSON(mappings); err != nil {
return 1, err
}
} else {
fmt.Printf("ID: %s\n", container.ID)
fmt.Printf("UIDs: %v\n", uids)
fmt.Printf("GIDs: %v\n", gids)
}
}
if len(matched) != len(args) {
return 1
return 1, nil
}
return 0
return 0, nil
}

func init() {
Expand Down
28 changes: 12 additions & 16 deletions cmd/containers-storage/containers.go
Original file line number Diff line number Diff line change
@@ -1,34 +1,30 @@
package main

import (
"encoding/json"
"fmt"
"os"

"github.com/containers/storage"
"github.com/containers/storage/pkg/mflag"
)

func containers(flags *mflag.FlagSet, action string, m storage.Store, args []string) int {
func containers(flags *mflag.FlagSet, action string, m storage.Store, args []string) (int, error) {
containers, err := m.Containers()
if err != nil {
fmt.Fprintf(os.Stderr, "%+v\n", err)
return 1
return 1, err
}
if jsonOutput {
json.NewEncoder(os.Stdout).Encode(containers)
} else {
for _, container := range containers {
fmt.Printf("%s\n", container.ID)
for _, name := range container.Names {
fmt.Printf("\tname: %s\n", name)
}
for _, name := range container.BigDataNames {
fmt.Printf("\tdata: %s\n", name)
}
return outputJSON(containers)
}
for _, container := range containers {
fmt.Printf("%s\n", container.ID)
for _, name := range container.Names {
fmt.Printf("\tname: %s\n", name)
}
for _, name := range container.BigDataNames {
fmt.Printf("\tdata: %s\n", name)
}
}
return 0
return 0, nil
}

func init() {
Expand Down
47 changes: 24 additions & 23 deletions cmd/containers-storage/copy.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ var (
chownOptions = ""
)

func copyContent(flags *mflag.FlagSet, action string, m storage.Store, args []string) int {
func copyContent(flags *mflag.FlagSet, action string, m storage.Store, args []string) (int, error) {
var untarIDMappings *idtools.IDMappings
var chownOpts *idtools.IDPair
if len(args) < 1 {
return 1
return 1, nil
}
if len(chownOptions) > 0 {
chownParts := strings.SplitN(chownOptions, ":", 2)
Expand All @@ -30,36 +30,36 @@ func copyContent(flags *mflag.FlagSet, action string, m storage.Store, args []st
}
uid, err := strconv.ParseUint(chownParts[0], 10, 32)
if err != nil {
fmt.Fprintf(os.Stderr, "error %q as a numeric UID: %v", chownParts[0], err)
return 1
return 1, fmt.Errorf("error %q as a numeric UID: %v", chownParts[0], err)
}
gid, err := strconv.ParseUint(chownParts[1], 10, 32)
if err != nil {
fmt.Fprintf(os.Stderr, "error %q as a numeric GID: %v", chownParts[1], err)
return 1
return 1, fmt.Errorf("error %q as a numeric GID: %v", chownParts[1], err)
}
chownOpts = &idtools.IDPair{UID: int(uid), GID: int(gid)}
}
target := args[len(args)-1]
if strings.Contains(target, ":") {
targetParts := strings.SplitN(target, ":", 2)
if len(targetParts) != 2 {
fmt.Fprintf(os.Stderr, "error parsing target location %q: only one part\n", target)
return 1
return 1, fmt.Errorf("error parsing target location %q: only one part", target)
}
targetLayer, err := m.Layer(targetParts[0])
if err != nil {
fmt.Fprintf(os.Stderr, "error finding layer %q: %+v\n", targetParts[0], err)
return 1
return 1, fmt.Errorf("error finding layer %q: %+v", targetParts[0], err)
}
untarIDMappings = idtools.NewIDMappingsFromMaps(targetLayer.UIDMap, targetLayer.GIDMap)
targetMount, err := m.Mount(targetLayer.ID, targetLayer.MountLabel)
if err != nil {
fmt.Fprintf(os.Stderr, "error mounting layer %q: %+v\n", targetLayer.ID, err)
return 1
return 1, fmt.Errorf("error mounting layer %q: %+v", targetLayer.ID, err)
}
target = filepath.Join(targetMount, targetParts[1])
defer m.Unmount(targetLayer.ID, false)
defer func() {
if _, err := m.Unmount(targetLayer.ID, false); err != nil {
fmt.Fprintf(os.Stderr, "error unmounting layer %q: %+v\n", targetLayer.ID, err)
// Does not change the exit code
}
}()
}
args = args[:len(args)-1]
for _, srcSpec := range args {
Expand All @@ -68,30 +68,31 @@ func copyContent(flags *mflag.FlagSet, action string, m storage.Store, args []st
if strings.Contains(source, ":") {
sourceParts := strings.SplitN(source, ":", 2)
if len(sourceParts) != 2 {
fmt.Fprintf(os.Stderr, "error parsing source location %q: only one part\n", source)
return 1
return 1, fmt.Errorf("error parsing source location %q: only one part", source)
}
sourceLayer, err := m.Layer(sourceParts[0])
if err != nil {
fmt.Fprintf(os.Stderr, "error finding layer %q: %+v\n", sourceParts[0], err)
return 1
return 1, fmt.Errorf("error finding layer %q: %+v", sourceParts[0], err)
}
tarIDMappings = idtools.NewIDMappingsFromMaps(sourceLayer.UIDMap, sourceLayer.GIDMap)
sourceMount, err := m.Mount(sourceLayer.ID, sourceLayer.MountLabel)
if err != nil {
fmt.Fprintf(os.Stderr, "error mounting layer %q: %+v\n", sourceLayer.ID, err)
return 1
return 1, fmt.Errorf("error mounting layer %q: %+v", sourceLayer.ID, err)
}
source = filepath.Join(sourceMount, sourceParts[1])
defer m.Unmount(sourceLayer.ID, false)
defer func() {
if _, err := m.Unmount(sourceLayer.ID, false); err != nil {
fmt.Fprintf(os.Stderr, "error unmounting layer %q: %+v\n", sourceLayer.ID, err)
// Does not change the exit code
}
}()
}
archiver := chrootarchive.NewArchiverWithChown(tarIDMappings, chownOpts, untarIDMappings)
if err := archiver.CopyWithTar(source, target); err != nil {
fmt.Fprintf(os.Stderr, "error copying %q to %q: %+v\n", source, target, err)
return 1
return 1, fmt.Errorf("error copying %q to %q: %+v", source, target, err)
}
}
return 0
return 0, nil
}

func init() {
Expand Down
Loading