bytecounter
This commit is contained in:
parent
69bf4d7074
commit
98fd78bb50
18
internal/bytecounter/BUILD
Normal file
18
internal/bytecounter/BUILD
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["bytecounter.go"],
|
||||||
|
importpath = "github.com/motiejus/code/undocker/internal/bytecounter",
|
||||||
|
visibility = ["//src/undocker:__subpackages__"],
|
||||||
|
)
|
||||||
|
|
||||||
|
go_test(
|
||||||
|
name = "go_default_test",
|
||||||
|
srcs = ["bytecounter_test.go"],
|
||||||
|
embed = [":go_default_library"],
|
||||||
|
deps = [
|
||||||
|
"@com_github_stretchr_testify//assert:go_default_library",
|
||||||
|
"@com_github_stretchr_testify//require:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
20
internal/bytecounter/bytecounter.go
Normal file
20
internal/bytecounter/bytecounter.go
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package bytecounter
|
||||||
|
|
||||||
|
import "io"
|
||||||
|
|
||||||
|
// ByteCounter is an io.Writer that counts bytes written to it
|
||||||
|
type ByteCounter struct {
|
||||||
|
N int64
|
||||||
|
w io.Writer
|
||||||
|
}
|
||||||
|
|
||||||
|
// New returns a new ByteCounter
|
||||||
|
func New(w io.Writer) *ByteCounter {
|
||||||
|
return &ByteCounter{w: w}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write writes to the underlying io.Writer and counts total written bytes
|
||||||
|
func (b *ByteCounter) Write(data []byte) (n int, err error) {
|
||||||
|
defer func() { b.N += int64(n) }()
|
||||||
|
return b.w.Write(data)
|
||||||
|
}
|
24
internal/bytecounter/bytecounter_test.go
Normal file
24
internal/bytecounter/bytecounter_test.go
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package bytecounter
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"io"
|
||||||
|
"testing"
|
||||||
|
"testing/iotest"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestByteCounter(t *testing.T) {
|
||||||
|
r := bytes.NewBufferString("0123456789")
|
||||||
|
w := bytes.NewBuffer(nil)
|
||||||
|
|
||||||
|
tw := iotest.TruncateWriter(w, 4)
|
||||||
|
bc := New(tw)
|
||||||
|
|
||||||
|
_, err := io.Copy(bc, r)
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Len(t, w.Bytes(), 4)
|
||||||
|
assert.Equal(t, 4, bc.N)
|
||||||
|
}
|
@ -6,6 +6,7 @@ go_library(
|
|||||||
importpath = "github.com/motiejus/code/undocker/internal/cmdlxcconfig",
|
importpath = "github.com/motiejus/code/undocker/internal/cmdlxcconfig",
|
||||||
visibility = ["//src/undocker:__subpackages__"],
|
visibility = ["//src/undocker:__subpackages__"],
|
||||||
deps = [
|
deps = [
|
||||||
|
"//src/undocker/internal/cmd:go_default_library",
|
||||||
"//src/undocker/lxcconfig:go_default_library",
|
"//src/undocker/lxcconfig:go_default_library",
|
||||||
"@com_github_jessevdk_go_flags//:go_default_library",
|
"@com_github_jessevdk_go_flags//:go_default_library",
|
||||||
"@org_uber_go_multierr//:go_default_library",
|
"@org_uber_go_multierr//:go_default_library",
|
||||||
|
@ -5,17 +5,22 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
|
|
||||||
goflags "github.com/jessevdk/go-flags"
|
goflags "github.com/jessevdk/go-flags"
|
||||||
|
"github.com/motiejus/code/undocker/internal/cmd"
|
||||||
"github.com/motiejus/code/undocker/lxcconfig"
|
"github.com/motiejus/code/undocker/lxcconfig"
|
||||||
"go.uber.org/multierr"
|
"go.uber.org/multierr"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Command is "lxcconfig" command
|
// Command is "lxcconfig" command
|
||||||
type Command struct {
|
type (
|
||||||
PositionalArgs struct {
|
Command struct {
|
||||||
Infile goflags.Filename `long:"infile" description:"Input tarball"`
|
PositionalArgs struct {
|
||||||
Outfile string `long:"outfile" description:"Output path, stdout is '-'"`
|
cmd.BaseCommand
|
||||||
} `positional-args:"yes" required:"yes"`
|
|
||||||
}
|
Infile goflags.Filename `long:"infile" description:"Input tarball"`
|
||||||
|
Outfile string `long:"outfile" description:"Output path, stdout is '-'"`
|
||||||
|
} `positional-args:"yes" required:"yes"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
// Execute executes lxcconfig Command
|
// Execute executes lxcconfig Command
|
||||||
func (c *Command) Execute(args []string) (err error) {
|
func (c *Command) Execute(args []string) (err error) {
|
||||||
|
@ -222,15 +222,3 @@ func whiteoutDirs(whreaddir map[string]int, nlayers int) []*tree {
|
|||||||
}
|
}
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
// byteCounter is an io.Writer that counts bytes written to it
|
|
||||||
type byteCounter struct {
|
|
||||||
rw io.Writer
|
|
||||||
n int64
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write writes to the underlying io.Writer and counts total written bytes
|
|
||||||
func (b *byteCounter) Write(data []byte) (n int, err error) {
|
|
||||||
defer func() { b.n += int64(n) }()
|
|
||||||
return b.rw.Write(data)
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user