Commit graph

235 commits

Author SHA1 Message Date
fc5450ed71
*: add an update/restore functionality
This allows for restoring some attributes of files from the state in an
mtree Manifest

Reported-by: Matthew Garrett <Matthewgarrett@google.com>
Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
2017-03-17 12:42:57 -04:00
e359fa7d2d Merge pull request #124 from vbatts/comment_update
Comment update
2017-02-16 07:51:21 -08:00
6e336a525d
git: add an ignores
Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
2017-02-16 10:45:15 -05:00
eca64ff621
walk: update the comment
Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
2017-02-16 10:44:52 -05:00
f165f4b7cc Merge pull request #123 from cyphar/test-unicode-integration
test: cli: add unicode verification test
2017-02-15 17:42:38 -08:00
Aleksa Sarai
f6c295f2e9
test: cli: add unicode verification test
This wraps up the govis changes. While umoci has much more hardcore
tests for unicode, this is done to ensure that go-mtree won't break
before its vendored into umoci.

Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-02-16 09:28:21 +11:00
711a89aa4c Merge pull request #122 from cyphar/remove-govis-travis
pkg: govis: remove travis-ci files
2017-02-15 13:37:36 -05:00
Aleksa Sarai
4ad871ca46
pkg: govis: remove travis-ci files
Since govis is now a subpackage, drop references to the project as a
govis package.

Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-02-16 05:18:02 +11:00
7b6f89f33d Merge pull request #121 from cyphar/switch-to-govis
*: switch everything to govis
2017-02-15 13:14:38 -05:00
Aleksa Sarai
c5ec1c9f3a
*: switch everything to govis
Now that we have govis, move everything to using govis.{Vis,Unvis} and
then remove the cvis build tags (because that code no longer exists).

Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-02-16 03:21:43 +11:00
Aleksa Sarai
91d7ec8c89
subtree merge: cyphar/govis
govis is a reimplementation of vis(3) and unvis(3) specifically made to
be unicode aware. It was specifically rewritten to replace cvis and the
other go vis reimplementation we have in go-mtree.

Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-02-16 03:08:51 +11:00
Aleksa Sarai
c889416068
*: fix go-vet errors
Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-02-16 03:08:07 +11:00
Aleksa Sarai
c9551d5820
README: add travis-ci build
Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-02-16 01:11:32 +11:00
Aleksa Sarai
cbe20d4292
govis: extend roundtrip testing
This is necessary to ensure that strings I don't have examples of work
properly. The same thing applies for double-encode and double-decode
usecases.

Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-02-16 01:07:51 +11:00
Aleksa Sarai
4045484afb
vis: rewrite to use byte slices
This results in all multi-byte characters to be encoded in a way that
naive unvis(3) implementations will not bork up the encoding. In
addition, it also ensures that the output of Vis will always be ASCII
*only*.

Also test far more cases in *_test.go when it comes to different flags,
and do far more tests to ensure that the output of Vis() makes sense.
These outputs come directly from vis(3) and so are useful regression
tests to ensure that the handling of Vis() is identical to the original.

Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-02-16 01:07:16 +11:00
Aleksa Sarai
c2a9f1a56d
flags -> govis
Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-02-14 02:11:41 +11:00
Aleksa Sarai
de223ffc92
unvis: implement meta and ctrl characters ('\M__' and '\^_')
While these characters are really weird to handle, here is a fairly
simple implementation that need some more testing (and a proper
secondary source to compare against).

Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-02-13 08:03:04 +11:00
Aleksa Sarai
7b16f3a307
travis: add .travis.yml
Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-02-13 07:43:24 +11:00
Aleksa Sarai
35708696fe
unvis: implement proper '\xff' and '\377' escape handling
In particular, previously such escape handling would break because we
would attempt to encode characters >0x7f as runes -- which would then
result in escapes that want to encode multi-byte characters breaking.

There's still some work necessary in Vis() to make it act sanely when it
comes to arbitrary bit streams. Not to mention that we need to figure
out what we actually want to do there...

Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-02-13 04:53:14 +11:00
Aleksa Sarai
3b18d38388
govis: add integration tests
Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-02-12 04:08:21 +11:00
Aleksa Sarai
44391840b6
vis: partial vis(3) port
This is a stopgap while I figure out how I should go about implementing
vis(3). It's also important to have some vis(3) implementation so I can
do integration tests on round-trips.

Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-02-12 04:07:37 +11:00
Aleksa Sarai
cd1de45ba5
unvis: implement partial unvis(3) implementation
Also add some unit tests -- one of which currently fails due to ongoing
design discussion about how certain escape codes should be handled.

Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-02-12 04:06:25 +11:00
Aleksa Sarai
1e8de82690
*: license under Apache 2.0
Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-02-11 21:10:12 +11:00
Aleksa Sarai
4c009fc4b2
README: add stub readme
Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-02-11 21:09:06 +11:00
Aleksa Sarai
85e7fd2d50
initial commit
Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-02-11 21:07:17 +11:00
5685419c3e Merge pull request #119 from cyphar/unvis-utf8
unvis_go: leave unicode unchanged with Unvis()
2017-02-10 09:19:18 -06:00
Aleksa Sarai
f6dd726b66
unvis_go: leave unicode unchanged with Unvis()
Because the original code for vis() was ported to Go using the []byte{}
notion, this causes issues for multi-rune bytes (which were not
correctly treated -- and caused loss of information).

Fix this by dealing with []rune instead, which better conveys the
concept at hand. In addition, add tests to ensure that this does not
happen again.

Though, we _really_ should move this code into a library which has a
better test suite -- and the parser itself should be reimplemented to be
less ... 80s.

Fixes: #118
Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-02-10 23:08:00 +11:00
0185fe9b62 Merge pull request #117 from vbatts/release
release: add some steps to remember
2017-01-23 15:06:15 -05:00
67b30e3e57
release: add some steps to remember
Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
2017-01-23 14:40:40 -05:00
1a3d369341 Merge pull request #116 from vbatts/stdin
gomtree: allow manifest to be provided on stdin
2017-01-20 13:17:52 -05:00
21a2577f01
gomtree: allow manifest to be provided on stdin
like `gomtree -c -p /tmp/dir1 -K sha1 | gomtree -p /tmp/dir2`

Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
2017-01-20 13:13:59 -05:00
b7967864aa
cli.test: failing test on stdin manifest
behavior ought to be, when `-f <file>` is not provided, then expect the
manifest to be provided on stdin.
Currently gomtree just fails if there is no `-f` (and it is not `-c`)

Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
2017-01-20 13:08:15 -05:00
b9e743fdf0 Merge pull request #115 from vbatts/tmpdir
cli.test: passthrough and use TMPDIR
2017-01-20 11:33:57 -05:00
235566d9e0
cli.test: passthrough and use TMPDIR
Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
2017-01-20 11:30:54 -05:00
d1073b349b Merge pull request #114 from vbatts/xattr_test
cli.test: setting xattr requires a value
2017-01-20 11:27:18 -05:00
b71ad0f21e
cli.test: setting xattr requires a value
this early check was not valid as it required a value before it would
attempt to set the xattr

Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
2017-01-20 11:16:38 -05:00
97e571a55a Merge pull request #112 from vbatts/carry_pr111
Carry pr111
2017-01-20 11:00:04 -05:00
2b97fe83d3 Merge pull request #110 from cyphar/xattr-encode-spaces
keywords: encode xattr.* keywords with Vis
2017-01-20 10:57:30 -05:00
a4e826f189
glide: add project info
Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
2017-01-20 10:55:48 -05:00
1f53bd1b61
test: only work with non-vendored source
by vendoring source, now './...' includes loads of vet/test/lint errors.
Let's ignore those.

Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
2017-01-20 10:52:37 -05:00
Lokesh Mandvekar
c9762c4d0e
vendor golang.org/x/crypto using glide
This would help us build go-mtree on RHEL/CentOS and
distros where golang.org/x/crypto isn't provided or supported.

Signed-off-by: Lokesh Mandvekar <lsm5@fedoraproject.org>
2017-01-19 17:31:32 -05:00
Aleksa Sarai
071977cef6
test: cli: add xattr tests
Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-01-17 00:48:06 +11:00
Aleksa Sarai
9cdd9152b3
cmd: gomtree: re-enable errors when there is a Modified entry
Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-01-17 00:46:28 +11:00
Aleksa Sarai
3c76a35588
test: cli: add information about which test failed
Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-01-17 00:46:28 +11:00
Aleksa Sarai
f9adee80f4
keywords: encode xattr.* keywords with Vis
This allows for xattr keywords to include spaces and other such options
(which is perfectly valid according to the definition of Lsetxattr --
any character except '\x00' is fair game).

Signed-off-by: Aleksa Sarai <asarai@suse.de>
2017-01-17 00:46:24 +11:00
94d7041e8e Merge pull request #108 from cyphar/107-xattr-always-diff
compare: always diff "xattr" keys
2017-01-16 07:32:03 -05:00
Aleksa Sarai
ad35cae482
compare: always diff "xattr" keys
Because of how xattr works (it will not be set on all files, but it's
possible for it to be added to a file without changing any other key)
it's necessary that we _always_ compute a diff when we hit an inode that
has xattr keys set.

Signed-off-by: Aleksa Sarai <asarai@suse.de>
2016-12-17 20:14:17 +11:00
0dc720e861 Merge pull request #96 from cyphar/add-unpriv-walking
walk: implement "unprivileged manifest generation"
2016-12-14 13:32:14 -05:00
Aleksa Sarai
08004a9a8c
fseval: add tests for FsEval
Signed-off-by: Aleksa Sarai <asarai@suse.de>
2016-12-14 17:14:51 +11:00
Aleksa Sarai
e22043cb86
walk: implement FsEval hooks
In certain circumstances (such as the manifest generation of a
filesystem as an unprivileged user) it is important to provide hooks
that override the default os.* implementation of filesystem-related
functions.

In order to avoid merging too much code from outside projects (such as
umoci) this is implemented by providing FsEval hooks to Walk() and
Check(). This allows for users of go-mtree to modify how filesystem
checks are done, without compromising the simplicity of go-mtree's code.

Signed-off-by: Aleksa Sarai <asarai@suse.de>
2016-12-14 16:26:31 +11:00