]> git.k1024.org Git - pyxattr.git/log
pyxattr.git
2 years agoMakefile: drop py<3.7, add 3.10
Iustin Pop [Wed, 12 Oct 2022 19:40:39 +0000 (22:40 +0300)]
Makefile: drop py<3.7, add 3.10

The Makefile has a home-grown multi-Python test setup, and that wasn't updated when the CI was switched to 3.7+. This fixes that inconsistency.

2 years agoCI: Drop old installTyping flag
Iustin Pop [Wed, 12 Oct 2022 18:59:33 +0000 (21:59 +0300)]
CI: Drop old installTyping flag

No longer needed since Python 3.4 is not tested anymore.

2 years agoCI: Bump cache key version
Iustin Pop [Wed, 12 Oct 2022 18:57:36 +0000 (21:57 +0300)]
CI: Bump cache key version

This is needed due to pip changes - sphinx and recommonmark are not cached, and this leads to extra work during setup.

2 years agoInstall recommonmark too
Iustin Pop [Wed, 12 Oct 2022 18:48:02 +0000 (21:48 +0300)]
Install recommonmark too

Just learned that this is deprecated, but let's get the doc CI going, and then do the change - it will actually be tested.

2 years agoCI: Run doc builds too
Iustin Pop [Wed, 12 Oct 2022 18:41:48 +0000 (21:41 +0300)]
CI: Run doc builds too

This would better live in a separate CI run, since we don't care so much about all OS builds, but let's how much it adds.

2 years agoRefresh the README
Iustin Pop [Mon, 10 Oct 2022 20:16:59 +0000 (23:16 +0300)]
Refresh the README

This updates the list of supported Python versions (since I can't test with Python 3.4 anymore), and adds a bit more details about dependencies needed for building from source - fixes #33.

2 years agoProperly handle module refcount during init errors
Iustin Pop [Mon, 10 Oct 2022 19:52:33 +0000 (22:52 +0300)]
Properly handle module refcount during init errors

Together with the commit in #36, this should fix #35.

2 years agoDon't leak temporary tuples in get_all() (#36)
Iustin Pop [Sun, 9 Oct 2022 21:07:06 +0000 (00:07 +0300)]
Don't leak temporary tuples in get_all() (#36)

Issue #35 found two instances of memory leaks. This fixes the first one, which arguably is a more realistic case.

2 years agoAllow triggering workflows runs manually
Iustin Pop [Sun, 9 Oct 2022 19:53:25 +0000 (22:53 +0300)]
Allow triggering workflows runs manually

2 years agoSwitch CI images to newest and drop Python < 3.7
Iustin Pop [Sun, 9 Oct 2022 19:37:08 +0000 (22:37 +0300)]
Switch CI images to newest and drop Python < 3.7

The Ubuntu 18 image with Python 3.4 is going away soon. Python 3.6 is no longer supported on newest Ubuntu *and* MacOS, so let's just switch the CI image to newer versions. If this makes the CI pass again, I'll bump supported Python versions.

3 years agoUpdate CI schedule to include periodic runs
Iustin Pop [Sun, 6 Jun 2021 19:01:08 +0000 (21:01 +0200)]
Update CI schedule to include periodic runs

… and also trigger on pull requests.

3 years agoEnable PyPy runs as well
Iustin Pop [Sat, 5 Jun 2021 16:05:30 +0000 (18:05 +0200)]
Enable PyPy runs as well

Switch the 'python-version' key to expanded, since it's too long
now. Also enable fail-fast, as otherwise too much time is spent
testing passing things.

Note that pypy supports a smaller range of versions (which is in a way
good, too many tests otherwise).

3 years agoEnable Python 3.10 builds
Iustin Pop [Sat, 5 Jun 2021 15:54:47 +0000 (17:54 +0200)]
Enable Python 3.10 builds

Let's get early warning…

3 years agoEnable MacOS builds
Iustin Pop [Sat, 5 Jun 2021 02:30:44 +0000 (04:30 +0200)]
Enable MacOS builds

Travis was not supporting them, but apparently GitHub Actions do?
Let's try.

3 years agoSkip user symlink test on MacOSX
Iustin Pop [Sat, 5 Jun 2021 02:53:43 +0000 (04:53 +0200)]
Skip user symlink test on MacOSX

Apparently MacOS doesn't have the same limitation (feature?) as Linux
of preventing regular users from settings xattrs on symlinks, so let's
skip this test on it (MacOS).

3 years agoStore codecov output as an artifact
Iustin Pop [Sat, 5 Jun 2021 02:24:58 +0000 (04:24 +0200)]
Store codecov output as an artifact

3 years agoStop uploading to coveralls
Iustin Pop [Sat, 5 Jun 2021 02:20:15 +0000 (04:20 +0200)]
Stop uploading to coveralls

This allows significant cleanup as we don't need anymore a post-job
and we can drop lcov installation/processing. Codecov is switched back
in gcov mode.

3 years agoRemove auto-detection of optimal buffer size
Iustin Pop [Sat, 5 Jun 2021 01:46:48 +0000 (03:46 +0200)]
Remove auto-detection of optimal buffer size

Since we don't pass zero anymore, this code is never called. Replace
it with 'zero means hardcoded initial value', since that hardcoded
value is what we were already passing, and change all the callers to
pass in zero (as 'auto-compute' again) instead, for simplicity.

3 years agoCodecov: disable gcov
Iustin Pop [Sat, 5 Jun 2021 00:53:24 +0000 (02:53 +0200)]
Codecov: disable gcov

Coverage informatio is already processed by lcov, so let's use that
directly. Should behave more close to coveralls.

3 years agoName codecov uploads by the Python version
Iustin Pop [Sat, 5 Jun 2021 00:41:29 +0000 (02:41 +0200)]
Name codecov uploads by the Python version

This way the artifacts in codecov are much clearer.

3 years agoRemove verbose from the codecov action
Iustin Pop [Sat, 5 Jun 2021 00:26:13 +0000 (02:26 +0200)]
Remove verbose from the codecov action

3 years agoUpdate README to point to github actions and badge
Iustin Pop [Sat, 5 Jun 2021 00:22:19 +0000 (02:22 +0200)]
Update README to point to github actions and badge

… instead of Travis.

3 years agoShorten the name of the CI
Iustin Pop [Sat, 5 Jun 2021 00:08:28 +0000 (02:08 +0200)]
Shorten the name of the CI

3 years agoRemove the travis config
Iustin Pop [Sat, 5 Jun 2021 00:07:37 +0000 (02:07 +0200)]
Remove the travis config

GitHub Actions seems pretty stable now, let's switch over.

3 years agoEnable codecov as well
Iustin Pop [Sat, 5 Jun 2021 00:00:46 +0000 (02:00 +0200)]
Enable codecov as well

3 years agoEnable coverage and coveralls upload in github actions
Iustin Pop [Fri, 4 Jun 2021 23:31:33 +0000 (01:31 +0200)]
Enable coverage and coveralls upload in github actions

3 years agoInitial github actions-based continous build
Iustin Pop [Fri, 4 Jun 2021 22:46:55 +0000 (00:46 +0200)]
Initial github actions-based continous build

Preparing to migrate from Travis…

3 years agoStore doc/readme and doc/news in the git repo
Iustin Pop [Sun, 6 Dec 2020 14:07:35 +0000 (15:07 +0100)]
Store doc/readme and doc/news in the git repo

… instead of rebuilding them every time. This is in order to fix the
readthedocs "build", since it only builds docs (via sphinx) but
doesn't run the actual build.

3 years agoRemove compatibility with old recommonmark versions
Iustin Pop [Sun, 29 Nov 2020 19:50:06 +0000 (20:50 +0100)]
Remove compatibility with old recommonmark versions

It's hard trying to keep compatibility with both very old (<1.8),
old (1.8) and modern (Sphinx), while also supporting old recommonmark;
recommonmark 0.5 was released in January 2019.

So let's drop the old support and just keep support for Sphinx 1.8 and
3.0+, and more modern recommonmark.

3 years agoRelease version 0.7.2 v0.7.2
Iustin Pop [Sun, 29 Nov 2020 19:19:04 +0000 (20:19 +0100)]
Release version 0.7.2

3 years agoAdd recommonmark to sphinx extensions
Iustin Pop [Sun, 29 Nov 2020 19:38:33 +0000 (20:38 +0100)]
Add recommonmark to sphinx extensions

With Sphinx 3.0+, the old way of enabling markdown is completely
broken, so without this the documentation is not really working…

3 years agoRun Python 3.9 tests too
Iustin Pop [Sun, 29 Nov 2020 12:09:14 +0000 (13:09 +0100)]
Run Python 3.9 tests too

Both locally and on travis.

3 years ago[Fixed] typo in readme.md
Anubhav Choudhary [Fri, 9 Oct 2020 04:55:00 +0000 (10:25 +0530)]
[Fixed] typo in readme.md

`sudo install python3-pyxattr` changed to `sudo apt install python3-pyxattr`

4 years agoFix travis config after tests rename
Iustin Pop [Tue, 26 Nov 2019 21:28:48 +0000 (22:28 +0100)]
Fix travis config after tests rename

4 years agoRename test/ → tests/
Iustin Pop [Tue, 26 Nov 2019 21:17:09 +0000 (22:17 +0100)]
Rename test/ → tests/

More consistency between my packages

4 years agoAdd unreleased changelog
Iustin Pop [Tue, 26 Nov 2019 21:14:55 +0000 (22:14 +0100)]
Add unreleased changelog

4 years agoRework and expand the mixed access test
Iustin Pop [Tue, 26 Nov 2019 21:13:24 +0000 (22:13 +0100)]
Rework and expand the mixed access test

This is more of a kernel xattr test, not the library, but good
enough to guarantee mixed access from Python.

4 years agosetup.py: add one more classifier topic
Iustin Pop [Tue, 26 Nov 2019 20:49:51 +0000 (21:49 +0100)]
setup.py: add one more classifier topic

4 years agoTests: ensure resources as closed in subject tests
Iustin Pop [Tue, 26 Nov 2019 20:48:28 +0000 (21:48 +0100)]
Tests: ensure resources as closed in subject tests

A bit of boilerplate, but gets rid of the leaking FD problem.

5 years agoBump version for 0.7.1 release… v0.7.1
Iustin Pop [Tue, 26 Nov 2019 03:37:33 +0000 (04:37 +0100)]
Bump version for 0.7.1 release…

5 years agoOops, fix bug tracker link
Iustin Pop [Tue, 26 Nov 2019 03:35:22 +0000 (04:35 +0100)]
Oops, fix bug tracker link

5 years agoBump version numbers for new release v0.7.0
Iustin Pop [Tue, 26 Nov 2019 03:29:12 +0000 (04:29 +0100)]
Bump version numbers for new release

No sense in waiting more, this is good conversion to Python 3 +
feature request + a bug fix.

5 years agoSwitch coverage badge to codecov
Iustin Pop [Tue, 26 Nov 2019 03:26:23 +0000 (04:26 +0100)]
Switch coverage badge to codecov

Still issues with merging reports in coveralls.

5 years agoCheck return value from PyList_Append
Iustin Pop [Tue, 26 Nov 2019 03:18:35 +0000 (04:18 +0100)]
Check return value from PyList_Append

This fixes the correctness aspect of #17, although not the entire
point.

5 years agoExpand setup.py configuration
Iustin Pop [Tue, 26 Nov 2019 03:05:42 +0000 (04:05 +0100)]
Expand setup.py configuration

The current pypi project page is somewhat bare… and shields.io can't
extract metadata from it.

5 years agoRun tests on file io streams as well
Iustin Pop [Tue, 26 Nov 2019 03:05:26 +0000 (04:05 +0100)]
Run tests on file io streams as well

5 years agoAdd support for Path-like objects in Python 3.6+
Iustin Pop [Tue, 26 Nov 2019 02:36:40 +0000 (03:36 +0100)]
Add support for Path-like objects in Python 3.6+

This is done by switching to PyUnicode_FSConverter (3.1+), which
supports it. The convert_obj() function is now much simpler, which is
a bonus.

Expand tests to check behaviour with path objects, and skip those on
Python 3.6.

Closes #20.

5 years agoStart updating NEWS for upcoming release
Iustin Pop [Tue, 26 Nov 2019 02:34:06 +0000 (03:34 +0100)]
Start updating NEWS for upcoming release

Otherwise I forget what's in :)

5 years agoSwitch namespace_none test to check all calls
Iustin Pop [Tue, 26 Nov 2019 02:24:42 +0000 (03:24 +0100)]
Switch namespace_none test to check all calls

Instead of all input parameter types for one call. This is better
since more calls are checked, and the parameter type checking is not
the goal of this test.

5 years agoTravis: cache codecov as well
Iustin Pop [Mon, 25 Nov 2019 04:35:17 +0000 (05:35 +0100)]
Travis: cache codecov as well

Since it's anyway installed.

5 years agoRun name tests as (encoded) bytes too
Iustin Pop [Mon, 25 Nov 2019 04:19:32 +0000 (05:19 +0100)]
Run name tests as (encoded) bytes too

5 years agoTests: remove_on_missing applies to symlinks as well
Iustin Pop [Mon, 25 Nov 2019 04:12:45 +0000 (05:12 +0100)]
Tests: remove_on_missing applies to symlinks as well

5 years agoTests: small py3 cleanup
Iustin Pop [Mon, 25 Nov 2019 04:12:25 +0000 (05:12 +0100)]
Tests: small py3 cleanup

5 years agoRemove support for Python 2 in the extension module
Iustin Pop [Mon, 25 Nov 2019 04:04:20 +0000 (05:04 +0100)]
Remove support for Python 2 in the extension module

Simplifies a bit the code, but not much (yet?).

5 years agoDisable MacOS builds
Iustin Pop [Mon, 25 Nov 2019 04:00:52 +0000 (05:00 +0100)]
Disable MacOS builds

Apparently Python is not actually supported, so the Python 2 builds
were working by accident. Sigh sigh sigh…

5 years agoMakefile: add a simpler test target
Iustin Pop [Mon, 25 Nov 2019 03:56:19 +0000 (04:56 +0100)]
Makefile: add a simpler test target

5 years agoSplit the other monolitic test function
Iustin Pop [Mon, 25 Nov 2019 03:47:18 +0000 (04:47 +0100)]
Split the other monolitic test function

Yay, cleaner now. But lots of many test invocations :)

5 years agoSplit the monolithic ListSetGetDeprecated test
Iustin Pop [Mon, 25 Nov 2019 03:43:48 +0000 (04:43 +0100)]
Split the monolithic ListSetGetDeprecated test

The failure modes are better tested separately, and leave this main
test as set-get-remove simple test.

5 years agoIntroduce an any_subject fixture which includes symlinks
Iustin Pop [Mon, 25 Nov 2019 03:38:59 +0000 (04:38 +0100)]
Introduce an any_subject fixture which includes symlinks

Only symlink creation fails for user attributes on symlinks, so tests
which only list/get do work. This allows removing explicit tests for
symlinks.

5 years agoAdd explicit test for symlink creation failure
Iustin Pop [Mon, 25 Nov 2019 03:35:32 +0000 (04:35 +0100)]
Add explicit test for symlink creation failure

5 years agoDon't compute coverage for external files
Iustin Pop [Mon, 25 Nov 2019 03:34:59 +0000 (04:34 +0100)]
Don't compute coverage for external files

Usually includes are caught here.

5 years agoReduce manyops count
Iustin Pop [Mon, 25 Nov 2019 03:24:57 +0000 (04:24 +0100)]
Reduce manyops count

We test more (object types), so let's reduce the call count for
each. Too slow otherwise.

5 years agoConvert test suite to pytest
Iustin Pop [Mon, 25 Nov 2019 03:22:15 +0000 (04:22 +0100)]
Convert test suite to pytest

Much more parametrisation, which means:

- more test cases covered (testing more/all object types in most
  functions)
- more granular tests, which should help diagnose of failures

5 years agotests: stop trying to set user attributes on symlinks
Iustin Pop [Mon, 25 Nov 2019 02:07:51 +0000 (03:07 +0100)]
tests: stop trying to set user attributes on symlinks

According to xattr(7), by design setting/modifying user attributes on
symlinks is not allowed, due to the way access control works, so stop
trying to test it.

5 years agoStop supporting Python 2
Iustin Pop [Mon, 25 Nov 2019 01:03:38 +0000 (02:03 +0100)]
Stop supporting Python 2

Bump minimum Python version to 3.4, which covers e.g. in Debian even
old-old-stable (Jessie), which is good enough.

This will allow code simplification and supporting new
features (e.g. to implement #20).

5 years agotests: move helper function outside the test class
Iustin Pop [Mon, 25 Nov 2019 00:37:05 +0000 (01:37 +0100)]
tests: move helper function outside the test class

Not sure why these were there in the first place…

5 years agotests: move constants outside the class
Iustin Pop [Mon, 25 Nov 2019 00:26:49 +0000 (01:26 +0100)]
tests: move constants outside the class

In preparation for pytest conversion.

5 years agoTravis: remove hack for Python 3.7 test
Iustin Pop [Sun, 24 Nov 2019 14:41:02 +0000 (15:41 +0100)]
Travis: remove hack for Python 3.7 test

Current config was testing 3.7 twice :/

5 years agoOnly export COVERALLS_PARALLEL in coveralls upload
Iustin Pop [Sun, 24 Nov 2019 13:54:56 +0000 (14:54 +0100)]
Only export COVERALLS_PARALLEL in coveralls upload

Having it shown as per-job env makes things more confusing.

5 years agoTravis: test on py3.7 and 3.8 too
Iustin Pop [Sun, 24 Nov 2019 13:53:57 +0000 (14:53 +0100)]
Travis: test on py3.7 and 3.8 too

5 years agoAlso export coverage results to codecov
Iustin Pop [Sun, 24 Nov 2019 13:53:12 +0000 (14:53 +0100)]
Also export coverage results to codecov

Will have to decide which to keep, but codecov at least supports
partial line coverage (while missing nicer overall dashboard :/).

5 years agoAdd a distcheck Makefile target
Iustin Pop [Sat, 23 Nov 2019 21:34:29 +0000 (22:34 +0100)]
Add a distcheck Makefile target

Too bad setuptools doesn't have it built-in…

5 years agoSwitch README file to Markdown and expand it
Iustin Pop [Sat, 23 Nov 2019 21:33:36 +0000 (22:33 +0100)]
Switch README file to Markdown and expand it

Let's get a bit more up with the times.

5 years agoFix a docstring formatting issue
Iustin Pop [Sat, 23 Nov 2019 20:53:37 +0000 (21:53 +0100)]
Fix a docstring formatting issue

This resulted in Sphinx altering the layout significantly.

5 years agoSwitch build system to Python 3
Iustin Pop [Sat, 23 Nov 2019 20:08:17 +0000 (21:08 +0100)]
Switch build system to Python 3

But still allow easy override (make ... PYTHON=python2).

5 years agoUpdate Travis config to export coverage information
Iustin Pop [Fri, 22 Nov 2019 23:00:48 +0000 (00:00 +0100)]
Update Travis config to export coverage information

Also enable newer Python (3.7, so not so new) under Linux.

5 years agoTravis: remove obsolete python versions
Iustin Pop [Sun, 13 Oct 2019 15:57:04 +0000 (17:57 +0200)]
Travis: remove obsolete python versions

Some of them, at least.

5 years agoTravis: remove "sudo:false"
Iustin Pop [Sat, 2 Mar 2019 20:14:41 +0000 (21:14 +0100)]
Travis: remove "sudo:false"

Per the deprecation of container-based
builds (https://blog.travis-ci.com/2018-11-19-required-linux-infrastructure-migration),
remove the sudo:false setting.

6 years agoTravis: add python 3.5 and 3.6 to build matrix pyxattr-v0.6.1
Iustin Pop [Tue, 24 Jul 2018 21:45:55 +0000 (23:45 +0200)]
Travis: add python 3.5 and 3.6 to build matrix

Tests pass locally, so all seems good.

6 years agoTravis: remove python 3.2 from build list
Iustin Pop [Tue, 24 Jul 2018 21:39:00 +0000 (23:39 +0200)]
Travis: remove python 3.2 from build list

It seems the setuptools libraries that are installed in the travis
environments don't support anymore 3.2, which causes the builds to be
wrongly marked as failed.

6 years agoFurther test suite fixes to symlink ops
Iustin Pop [Tue, 24 Jul 2018 21:38:15 +0000 (23:38 +0200)]
Further test suite fixes to symlink ops

I forgot about the deprecated ones…

6 years agoUpdate NEWS for proper contents of 0.6.1 release
Iustin Pop [Tue, 24 Jul 2018 21:34:22 +0000 (23:34 +0200)]
Update NEWS for proper contents of 0.6.1 release

6 years agoTravis build: remove dependency on libattr-dev
Iustin Pop [Tue, 24 Jul 2018 21:24:09 +0000 (23:24 +0200)]
Travis build: remove dependency on libattr-dev

One more cleanup as part of the migration to the glibc header.

6 years agoFix nofollow not work in MAC
adamlin [Mon, 20 Mar 2017 10:19:25 +0000 (18:19 +0800)]
Fix nofollow not work in MAC

6 years agoTests: fix symlink testing
Iustin Pop [Tue, 24 Jul 2018 21:20:53 +0000 (23:20 +0200)]
Tests: fix symlink testing

On Linux, non-root users are not allowed to set extended attributes,
so normal testing has hidden this. A fix to the Mac OS support
proposed in #14 uncovered this problem, which led to investigation and
this fix.

Manual testing on Linux with root and namespace=trusted now passes the
tests.

6 years agoTests: introduce an alias for NS_USER
Iustin Pop [Tue, 24 Jul 2018 21:14:37 +0000 (23:14 +0200)]
Tests: introduce an alias for NS_USER

Using NS_USER directly makes it hard to change it for a one-off manual
test, so let's virtualise it, and additionally allow overriding from
the command line.

6 years agoRelease GIL when do I/O operations
xwhuang [Fri, 9 Mar 2018 01:56:16 +0000 (09:56 +0800)]
Release GIL when do I/O operations

Release GIL in _list_obj, _get_obj, _set_obj, and _remove_obj. These
functions do I/O operations which take long time. We should release
GIL to allow other threads work.

6 years agoFurther improvements to benchmark code
Iustin Pop [Tue, 24 Jul 2018 20:36:23 +0000 (22:36 +0200)]
Further improvements to benchmark code

6 years agoMakefile: move list of python versions to a variable
Iustin Pop [Tue, 24 Jul 2018 20:29:07 +0000 (22:29 +0200)]
Makefile: move list of python versions to a variable

This way, it can be overridden from the command line, to allow a more
targeted test/benchmark.

6 years agoAdd a mini-benchmark suite
Iustin Pop [Tue, 24 Jul 2018 20:17:02 +0000 (22:17 +0200)]
Add a mini-benchmark suite

This will make it easy to see the impact of changes, for example the
one proposed in #16.

6 years agoBump version to 0.6.1
Iustin Pop [Tue, 24 Jul 2018 19:54:53 +0000 (21:54 +0200)]
Bump version to 0.6.1

Also switch downloads repository to HTTPS.

6 years agoRemove use of and mentions of the attr library
Iustin Pop [Tue, 24 Jul 2018 19:46:48 +0000 (21:46 +0200)]
Remove use of and mentions of the attr library

Commit a799657 removed its use, so let's drop the mention and the
linking against it.

6 years agoxattr.c: There is no more attr/xattr.h with >=attr-2.4.48
Lars Wendler [Wed, 10 Jan 2018 10:45:35 +0000 (11:45 +0100)]
xattr.c: There is no more attr/xattr.h with >=attr-2.4.48

See also:
http://git.savannah.nongnu.org/cgit/attr.git/commit/?id=7921157890d07858d092f4003ca4c6bae9fd2c38

7 years agoVersion bump for releasing 0.6.0 pyxattr-v0.6.0
Iustin Pop [Mon, 23 Jan 2017 21:38:35 +0000 (22:38 +0100)]
Version bump for releasing 0.6.0

Signed-off-by: Iustin Pop <iustin@k1024.org>
8 years agoExpand the testing of invalid arguments
Iustin Pop [Mon, 14 Nov 2016 21:02:25 +0000 (22:02 +0100)]
Expand the testing of invalid arguments

This is not significant advantage, but it does increase coverage. And
any coverage (even if not testing the logic too much) is better than
no coverage.

8 years agoTest writing large values
Iustin Pop [Sun, 13 Nov 2016 23:57:35 +0000 (00:57 +0100)]
Test writing large values

This exercises one more code path.

8 years agoAlso run tests using python-dbg
Iustin Pop [Sun, 13 Nov 2016 23:55:28 +0000 (00:55 +0100)]
Also run tests using python-dbg

8 years agoAdd a makefile coverage target
Iustin Pop [Tue, 25 Oct 2016 23:27:54 +0000 (01:27 +0200)]
Add a makefile coverage target

And expand a tiny bit the test suite to exercise one more error
path. Current coverage is not bad, ~87% lines coverage. For some
reason, no branch coverage is available :/

8 years agoRework getting and listing attributes
Iustin Pop [Tue, 25 Oct 2016 22:34:07 +0000 (00:34 +0200)]
Rework getting and listing attributes

Currently, getting and listing attributes is inconsistent in how it
deals with allocating memory for the data returned by the syscall:

- in most cases, we ask the kernel for the value, allocate memory,
  then retrieve the value; if the value changed (increased) in the
  meantime, this will lead to what should be preventable failures
- in the single case of getall, there is a loop for getting the
  individual values, but not for initially get the list of values

Hence the bug report #12. This rather large change refactors a lot of
the code:

- doing a get/list is abstracted away into a helper function that
  always does retries until we can read the value or fail with a
  different error than ERANGE; this helper deal with all allocations
  and resize operations.
- this means most of the single get/list operations are heavily
  simplified
- and also means that we can always start optimistically with an
  initial buffer size (currently set to 1K), instead of asking the
  kernel first: this saves one out of two syscalls in the case the
  value will indeed be smaller, but adds one extra syscall (the failed
  initial read) in the case it's not.

The optimisation is a double-edged sword: for small attributes, it
will be a win (e.g. the test suite is ~5% faster now), but for large
attribute/lists, it will be potentially slower (50% more
syscalls). Not sure how to nicely deal with this; it would be good to
have a keyword argument maybe? Or build flag? Left for future
enhancements.

Closes #12.

8 years agoA few small improvements to the test suite
Iustin Pop [Tue, 25 Oct 2016 21:59:02 +0000 (23:59 +0200)]
A few small improvements to the test suite

Especially testing empty attribute value and ensuring not found
attribute raises an exception.