Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
| ... | ... |
@@ -44,6 +44,7 @@ func NewNaiveDiffDriver(driver ProtoDriver, uidMaps, gidMaps []idtools.IDMap) Dr |
| 44 | 44 |
// Diff produces an archive of the changes between the specified |
| 45 | 45 |
// layer and its parent layer which may be "". |
| 46 | 46 |
func (gdw *NaiveDiffDriver) Diff(id, parent string) (arch archive.Archive, err error) {
|
| 47 |
+ startTime := time.Now() |
|
| 47 | 48 |
driver := gdw.ProtoDriver |
| 48 | 49 |
|
| 49 | 50 |
layerFs, err := driver.Get(id, "") |
| ... | ... |
@@ -88,6 +89,12 @@ func (gdw *NaiveDiffDriver) Diff(id, parent string) (arch archive.Archive, err e |
| 88 | 88 |
return ioutils.NewReadCloserWrapper(archive, func() error {
|
| 89 | 89 |
err := archive.Close() |
| 90 | 90 |
driver.Put(id) |
| 91 |
+ |
|
| 92 |
+ // NaiveDiffDriver compares file metadata with parent layers. Parent layers |
|
| 93 |
+ // are extracted from tar's with full second precision on modified time. |
|
| 94 |
+ // We need this hack here to make sure calls within same second receive |
|
| 95 |
+ // correct result. |
|
| 96 |
+ time.Sleep(startTime.Truncate(time.Second).Add(time.Second).Sub(time.Now())) |
|
| 91 | 97 |
return err |
| 92 | 98 |
}), nil |
| 93 | 99 |
} |