diff --git a/executor/cmd/root.go b/executor/cmd/root.go index a9244d701..2d9e52955 100644 --- a/executor/cmd/root.go +++ b/executor/cmd/root.go @@ -33,7 +33,7 @@ var ( dockerfilePath string destination string srcContext string - mtime bool + mtime string logLevel string ) @@ -41,7 +41,7 @@ func init() { RootCmd.PersistentFlags().StringVarP(&dockerfilePath, "dockerfile", "f", "/workspace/Dockerfile", "Path to the dockerfile to be built.") RootCmd.PersistentFlags().StringVarP(&srcContext, "context", "c", "", "Path to the dockerfile build context.") RootCmd.PersistentFlags().StringVarP(&destination, "destination", "d", "", "Registry the final image should be pushed to (ex: gcr.io/test/example:latest)") - RootCmd.PersistentFlags().BoolVarP(&mtime, "mtime", "", false, "Only look at mtime of a file when snapshotting") + RootCmd.PersistentFlags().StringVarP(&mtime, "mtime", "", "full", "Set this flag to change the file attributes inspected during snapshotting") RootCmd.PersistentFlags().StringVarP(&logLevel, "verbosity", "v", constants.DefaultLogLevel, "Log level (debug, info, warn, error, fatal, panic") } @@ -76,12 +76,8 @@ func execute() error { if err := util.ExtractFileSystemFromImage(baseImage); err != nil { return err } - hasher := util.Hasher() - if mtime { - logrus.Info("Only file modification times will be considered when snapshotting.") - hasher = util.MtimeHasher() - } - l := snapshot.NewLayeredMap(hasher) + + l := snapshot.NewLayeredMap(getHasher()) snapshotter := snapshot.NewSnapshotter(l, constants.RootDir) // Take initial snapshot @@ -131,3 +127,11 @@ func execute() error { // Push the image return image.PushImage(sourceImage, destination) } + +func getHasher() func(string) (string, error) { + if mtime == "time" { + logrus.Info("Only file modification time will be considered when snapshotting") + return util.MtimeHasher() + } + return util.Hasher() +} diff --git a/integration_tests/integration_test_yaml.go b/integration_tests/integration_test_yaml.go index 39ade9f14..f284f746e 100644 --- a/integration_tests/integration_test_yaml.go +++ b/integration_tests/integration_test_yaml.go @@ -28,7 +28,7 @@ var fileTests = []struct { configPath string context string repo string - mtime bool + mtime string }{ { description: "test extract filesystem", @@ -36,7 +36,7 @@ var fileTests = []struct { configPath: "/workspace/integration_tests/dockerfiles/config_test_extract_fs.json", context: "integration_tests/dockerfiles/", repo: "extract-filesystem", - mtime: true, + mtime: "time", }, { description: "test run", @@ -51,7 +51,7 @@ var fileTests = []struct { configPath: "/workspace/integration_tests/dockerfiles/config_test_run_2.json", context: "integration_tests/dockerfiles/", repo: "test-run-2", - mtime: true, + mtime: "time", }, { description: "test copy", @@ -59,7 +59,7 @@ var fileTests = []struct { configPath: "/workspace/integration_tests/dockerfiles/config_test_copy.json", context: "/workspace/integration_tests/", repo: "test-copy", - mtime: true, + mtime: "time", }, } @@ -144,8 +144,8 @@ func main() { // Then, buld the image with kbuild kbuildImage := testRepo + kbuildPrefix + test.repo mtime := "" - if test.mtime { - mtime = "--mtime" + if test.mtime != "" { + mtime = "--mtime=" + test.mtime } kbuild := step{ Name: executorImage,