Skip to content

Commit 8f43e7a

Browse files
committed
Output to stdout by default
Signed-off-by: Lei Jitang <[email protected]>
1 parent a694c4e commit 8f43e7a

File tree

4 files changed

+52
-36
lines changed

4 files changed

+52
-36
lines changed

cmd/oci-create-layer/main.go

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,31 +15,32 @@
1515
package main
1616

1717
import (
18+
"io"
1819
"log"
1920
"os"
21+
"path/filepath"
2022

2123
"github.com/opencontainers/image-tools/image"
2224
"github.com/spf13/cobra"
2325
)
2426

2527
type layerCmd struct {
26-
stdout *log.Logger
28+
stdout io.Writer
2729
stderr *log.Logger
2830
dest string
2931
}
3032

3133
func main() {
32-
stdout := log.New(os.Stdout, "", 0)
3334
stderr := log.New(os.Stderr, "", 0)
3435

35-
cmd := newLayerCmd(stdout, stderr)
36+
cmd := newLayerCmd(os.Stdout, stderr)
3637
if err := cmd.Execute(); err != nil {
3738
stderr.Println(err)
3839
os.Exit(1)
3940
}
4041
}
4142

42-
func newLayerCmd(stdout, stderr *log.Logger) *cobra.Command {
43+
func newLayerCmd(stdout io.Writer, stderr *log.Logger) *cobra.Command {
4344
v := &layerCmd{
4445
stdout: stdout,
4546
stderr: stderr,
@@ -66,15 +67,38 @@ func (v *layerCmd) Run(cmd *cobra.Command, args []string) {
6667
}
6768
os.Exit(1)
6869
}
69-
var err error
70+
var (
71+
err error
72+
out io.ReadCloser
73+
)
7074
if len(args) == 1 {
71-
err = image.CreateLayer(args[0], "", v.dest)
75+
out, err = image.CreateLayer(args[0], "")
7276
} else {
73-
err = image.CreateLayer(args[0], args[1], v.dest)
77+
out, err = image.CreateLayer(args[0], args[1])
7478
}
7579
if err != nil {
7680
v.stderr.Printf("create layer failed: %v", err)
7781
os.Exit(1)
7882
}
83+
if v.dest == "" {
84+
_, err := io.Copy(v.stdout, out)
85+
if err != nil {
86+
v.stderr.Printf("create layer failed: %v", err)
87+
os.Exit(1)
88+
}
89+
} else {
90+
filename := filepath.Clean(v.dest)
91+
f, err := os.Create(filename)
92+
if err != nil {
93+
v.stderr.Printf("create layer failed: %v", err)
94+
os.Exit(1)
95+
}
96+
defer f.Close()
97+
_, err = io.Copy(f, out)
98+
if err != nil {
99+
v.stderr.Printf("create layer failed: %v", err)
100+
os.Exit(1)
101+
}
102+
}
79103
os.Exit(0)
80104
}

cmd/oci-create-layer/oci-create-layer.1.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ oci-create-layer \- Create filesystem changeset
88
**oci-create-layer** [child] [parent] [flags]
99

1010
# DESCRIPTION
11-
`oci-create-layer` creates a filesystem changeset from two layers. It compares child with parent and generates a filsystem diff, pack the diff into a uncompressed tar archive. The output tar archive name is the child name with .tar suffix by default, use `--dest` to specify a custom one.
11+
`oci-create-layer` creates a filesystem changeset from two layers. It compares child with parent and generates a filsystem diff, pack the diff into a uncompressed tar archive. The default output is stdout, use `--dest` to specify a custom one.
1212

1313
# OPTIONS
1414
**--help**
@@ -19,7 +19,7 @@ The dest specify a particular filename where the layer write to
1919

2020
# EXAMPLES
2121
```
22-
$ oci-create-layer rootfs-1-s rootfs-1
22+
$ oci-create-layer --dest rootfs-1-s.tar rootfs-1-s rootfs-1
2323
$ ls
2424
rootfs-1 rootfs-1-s rootfs-1-s.tar
2525

image/layer.go

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,37 +15,13 @@
1515
package image
1616

1717
import (
18-
"fmt"
1918
"io"
20-
"os"
21-
"path/filepath"
2219

2320
"github.com/opencontainers/image-tools/utils"
2421
)
2522

2623
// CreateLayer cretes filesystem changset from child and parent
27-
func CreateLayer(child, parent, dest string) error {
28-
arch, err := Diff(child, parent)
29-
if err != nil {
30-
return err
31-
}
32-
defer arch.Close()
33-
filename := fmt.Sprintf("%s.tar", filepath.Clean(child))
34-
if dest != "" {
35-
filename = filepath.Clean(dest)
36-
}
37-
f, err := os.Create(filename)
38-
if err != nil {
39-
return err
40-
}
41-
defer f.Close()
42-
_, err = io.Copy(f, arch)
43-
return err
44-
}
45-
46-
// Diff produces an archive of the changes between the specified
47-
// layer and its parent layer which may be "".
48-
func Diff(child, parent string) (rc io.ReadCloser, err error) {
24+
func CreateLayer(child, parent string) (io.ReadCloser, error) {
4925
changes, err := utils.ChangesDirs(child, parent)
5026
if err != nil {
5127
return nil, err

image/layer_test.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func TestCreateFilesystemChangeset(t *testing.T) {
5656
}
5757
// create base layer
5858
tarfile := filepath.Join(tmp1, "base.tar")
59-
err = CreateLayer(basepath, "", tarfile)
59+
err = createLayer(basepath, "", tarfile)
6060
if err != nil {
6161
t.Fatal(err)
6262
}
@@ -103,7 +103,7 @@ func TestCreateFilesystemChangeset(t *testing.T) {
103103

104104
// create layer diff
105105
tarfile1 := filepath.Join(tmp1, "base.s1.tar")
106-
err = CreateLayer(snapshot1path, basepath, tarfile1)
106+
err = createLayer(snapshot1path, basepath, tarfile1)
107107
if err != nil {
108108
t.Fatal(err)
109109
}
@@ -133,6 +133,22 @@ func TestCreateFilesystemChangeset(t *testing.T) {
133133
}
134134
}
135135

136+
func createLayer(child, parent, dest string) error {
137+
filename := filepath.Clean(dest)
138+
f, err := os.Create(filename)
139+
if err != nil {
140+
return err
141+
}
142+
defer f.Close()
143+
out, err := CreateLayer(child, parent)
144+
if err != nil {
145+
return err
146+
}
147+
148+
_, err = io.Copy(f, out)
149+
return err
150+
}
151+
136152
func createFilesystem(path string, files map[string]bool, modify map[string]func(string) error) error {
137153
for f, add := range files {
138154
// add file

0 commit comments

Comments
 (0)