# All files / tar/lib update.js

100% Statements 20/20
100% Branches 15/15
100% Functions 4/4
100% Lines 20/20

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37

    2x
    2x

    2x
    36x

    36x
    1x

    35x
    1x

    34x
    1x

    33x

    33x
    33x

    2x
    33x

    33x
    32x

    33x
    2x
    24x

     'use strict'

    // tar -u

    const hlo = require('./high-level-opt.js')
    const r = require('./replace.js')
    // just call tar.r with the filter and mtimeCache

    const u = module.exports = (opt_, files, cb) => {
      const opt = hlo(opt_)

      if (!opt.file)
        throw new TypeError('file is required')

      if (opt.gzip)
        throw new TypeError('cannot append to compressed archives')

      if (!files || !Array.isArray(files) || !files.length)
        throw new TypeError('no files or directories specified')

      files = Array.from(files)

      mtimeFilter(opt)
      return r(opt, files, cb)
    }

    const mtimeFilter = opt => {
      const filter = opt.filter

      if (!opt.mtimeCache)
        opt.mtimeCache = new Map()

      opt.filter = filter ? (path, stat) =>
        filter(path, stat) && !(opt.mtimeCache.get(path) > stat.mtime)
        : (path, stat) => !(opt.mtimeCache.get(path) > stat.mtime)
    }