| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501 |
- <!doctype html>
- <html lang="en">
- <head>
- <title>Code coverage report for tar/lib/pax.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
- </head>
- <body>
- <div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> pax.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>62/62</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>75/75</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>9/9</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>60/60</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
- <pre><table class="coverage">
- <tr><td class="line-count quiet">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
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146</td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">11x</span>
- <span class="cline-any cline-yes">11x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">435x</span>
- <span class="cline-any cline-yes">435x</span>
- <span class="cline-any cline-yes">435x</span>
- <span class="cline-any cline-yes">435x</span>
- <span class="cline-any cline-yes">435x</span>
- <span class="cline-any cline-yes">435x</span>
- <span class="cline-any cline-yes">435x</span>
- <span class="cline-any cline-yes">435x</span>
- <span class="cline-any cline-yes">435x</span>
- <span class="cline-any cline-yes">435x</span>
- <span class="cline-any cline-yes">435x</span>
- <span class="cline-any cline-yes">435x</span>
- <span class="cline-any cline-yes">435x</span>
- <span class="cline-any cline-yes">435x</span>
- <span class="cline-any cline-yes">435x</span>
- <span class="cline-any cline-yes">435x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">34x</span>
- <span class="cline-any cline-yes">34x</span>
- <span class="cline-any cline-yes">1x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">33x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">33x</span>
- <span class="cline-any cline-yes">33x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">33x</span>
- <span class="cline-any cline-yes">16896x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">33x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">33x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">33x</span>
- <span class="cline-any cline-yes">8949x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">33x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">34x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">510x</span>
- <span class="cline-any cline-yes">204x</span>
- <span class="cline-any cline-yes">306x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">306x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">306x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">306x</span>
- <span class="cline-any cline-yes">306x</span>
- <span class="cline-any cline-yes">30x</span>
- <span class="cline-any cline-yes">306x</span>
- <span class="cline-any cline-yes">306x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">401x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">11x</span>
- <span class="cline-any cline-yes">401x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">11x</span>
- <span class="cline-any cline-yes">401x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">11x</span>
- <span class="cline-any cline-yes">2259x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">2259x</span>
- <span class="cline-any cline-yes">5x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">2254x</span>
- <span class="cline-any cline-yes">2254x</span>
- <span class="cline-any cline-yes">2254x</span>
- <span class="cline-any cline-yes">2254x</span>
- <span class="cline-any cline-yes">1x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">2253x</span>
- <span class="cline-any cline-yes">2253x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">2253x</span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-neutral"> </span>
- <span class="cline-any cline-yes">11x</span>
- <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
- const Header = require('./header.js')
- const path = require('path')
-
- class Pax {
- constructor (obj, global) {
- this.atime = obj.atime || null
- this.charset = obj.charset || null
- this.comment = obj.comment || null
- this.ctime = obj.ctime || null
- this.gid = obj.gid || null
- this.gname = obj.gname || null
- this.linkpath = obj.linkpath || null
- this.mtime = obj.mtime || null
- this.path = obj.path || null
- this.size = obj.size || null
- this.uid = obj.uid || null
- this.uname = obj.uname || null
- this.dev = obj.dev || null
- this.ino = obj.ino || null
- this.nlink = obj.nlink || null
- this.global = global || false
- }
-
- encode () {
- const body = this.encodeBody()
- if (body === '')
- return null
-
- const bodyLen = Buffer.byteLength(body)
- // round up to 512 bytes
- // add 512 for header
- const bufLen = 512 * Math.ceil(1 + bodyLen / 512)
- const buf = Buffer.allocUnsafe(bufLen)
-
- // 0-fill the header section, it might not hit every field
- for (let i = 0; i < 512; i++) {
- buf[i] = 0
- }
-
- new Header({
- // XXX split the path
- // then the path should be PaxHeader + basename, but less than 99,
- // prepend with the dirname
- path: ('PaxHeader/' + path.basename(this.path)).slice(0, 99),
- mode: this.mode || 0o644,
- uid: this.uid || null,
- gid: this.gid || null,
- size: bodyLen,
- mtime: this.mtime || null,
- type: this.global ? 'GlobalExtendedHeader' : 'ExtendedHeader',
- linkpath: '',
- uname: this.uname || '',
- gname: this.gname || '',
- devmaj: 0,
- devmin: 0,
- atime: this.atime || null,
- ctime: this.ctime || null
- }).encode(buf)
-
- buf.write(body, 512, bodyLen, 'utf8')
-
- // null pad after the body
- for (let i = bodyLen + 512; i < buf.length; i++) {
- buf[i] = 0
- }
-
- return buf
- }
-
- encodeBody () {
- return (
- this.encodeField('path') +
- this.encodeField('ctime') +
- this.encodeField('atime') +
- this.encodeField('dev') +
- this.encodeField('ino') +
- this.encodeField('nlink') +
- this.encodeField('charset') +
- this.encodeField('comment') +
- this.encodeField('gid') +
- this.encodeField('gname') +
- this.encodeField('linkpath') +
- this.encodeField('mtime') +
- this.encodeField('size') +
- this.encodeField('uid') +
- this.encodeField('uname')
- )
- }
-
- encodeField (field) {
- if (this[field] === null || this[field] === undefined)
- return ''
- const v = this[field] instanceof Date ? this[field].getTime() / 1000
- : this[field]
- const s = ' ' +
- (field === 'dev' || field === 'ino' || field === 'nlink'
- ? 'SCHILY.' : '') +
- field + '=' + v + '\n'
- const byteLen = Buffer.byteLength(s)
- // the digits includes the length of the digits in ascii base-10
- // so if it's 9 characters, then adding 1 for the 9 makes it 10
- // which makes it 11 chars.
- let digits = Math.floor(Math.log(byteLen) / Math.log(10)) + 1
- if (byteLen + digits >= Math.pow(10, digits))
- digits += 1
- const len = digits + byteLen
- return len + s
- }
- }
-
- Pax.parse = (string, ex, g) => new Pax(merge(parseKV(string), ex), g)
-
- const merge = (a, b) =>
- b ? Object.keys(a).reduce((s, k) => (s[k] = a[k], s), b) : a
-
- const parseKV = string =>
- string
- .replace(/\n$/, '')
- .split('\n')
- .reduce(parseKVLine, Object.create(null))
-
- const parseKVLine = (set, line) => {
- const n = parseInt(line, 10)
-
- // XXX Values with \n in them will fail this.
- // Refactor to not be a naive line-by-line parse.
- if (n !== Buffer.byteLength(line) + 1)
- return set
-
- line = line.substr((n + ' ').length)
- const kv = line.split('=')
- const k = kv.shift().replace(/^SCHILY\.(dev|ino|nlink)/, '$1')
- if (!k)
- return set
-
- const v = kv.join('=')
- set[k] = /^([A-Z]+\.)?([mac]|birth|creation)time$/.test(k)
- ? new Date(v * 1000)
- : /^[0-9]+$/.test(v) ? +v
- : v
- return set
- }
-
- module.exports = Pax
- </pre></td></tr>
- </table></pre>
- <div class='push'></div><!-- for sticky footer -->
- </div><!-- /wrapper -->
- <div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
- </div>
- </div>
- <script src="../../prettify.js"></script>
- <script>
- window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
- };
- </script>
- <script src="../../sorter.js"></script>
- </body>
- </html>
|