Commit Graph

322 Commits

Author SHA1 Message Date
Thomas Waldmann d3fe74d4c0 Cache: do not try to release the lock twice
If Cache was already closed and __del__ was called, it called close() again
and crashed when trying to release the lock again.
2015-03-09 15:17:56 +01:00
Thomas Waldmann 9841af5542 better attic create -v output
Added a indicator character to the left for (A)dded, (M)odified, (U)nchanged status
of regular files. Lowercase indicators are for special files.

You may or may not want to use grep to filter out U and d.
2015-03-08 19:18:21 +01:00
Thomas Waldmann d9cfca8989 PR #223 - Merge branch 'fix_45' of https://github.com/ThomasWaldmann/attic into merge 2015-03-08 15:09:01 +01:00
Thomas Waldmann 4633931413 add global option --no-cache-files to lower memory consumption
When given, attic does not use the "files" cache. Saves about 240B RAM per file
(that sounds only a little, but consider that backups nowadays are often millions of files).

So try this if attic eats more memory than you have as RAM (usually means paging or
MemoryErrors). Of course, saving memory is not for free. In my one experiment, run time
increased from 3.5 to 23 minutes (my system has enough RAM).
2015-03-08 15:01:24 +01:00
Thomas Waldmann 084f6e1602 PR #222 - Merge branch 'issue_189' of https://github.com/ThomasWaldmann/attic into merge 2015-03-08 04:20:13 +01:00
Thomas Waldmann be29e5f6f4 fix traceback when trying to do unsupported passphrase change, fixes #189 2015-03-08 04:19:25 +01:00
Thomas Waldmann c8b23b507d PR #221 - Merge branch 'issue_139' of https://github.com/ThomasWaldmann/attic into merge 2015-03-08 02:37:43 +01:00
Thomas Waldmann e425545c10 datetime does not like the year 10.000, fixes issue #139 2015-03-08 02:32:33 +01:00
Thomas Waldmann 70e907f4ed PR #184 - Merge branch 'fuse-filesizes' of https://github.com/dnnr/attic into merge 2015-03-07 00:09:51 +01:00
Thomas Waldmann 0d2cd28c19 PR #214 - Merge branch 'crypto_cleanup' of https://github.com/thomaswaldmann/attic into merge 2015-03-06 23:50:15 +01:00
Thomas Waldmann 29449e40bc PR #208 - Merge branch 'stdin_stdout_support' of https://github.com/thomaswaldmann/attic into merge 2015-03-06 23:28:00 +01:00
Thomas Waldmann fbaa505191 PR #206 - Merge branch 'fixes' of https://github.com/thomaswaldmann/attic into merge 2015-03-06 23:18:08 +01:00
Thomas Waldmann 8c4d290a93 PR #173 - Merge branch 'rpc-whitelist' of https://github.com/dnnr/attic into merge 2015-03-06 22:55:53 +01:00
Thomas Waldmann a5fe6160ba PR #150 - Merge branch 'normalize_paths' of https://github.com/wavexx/attic into merge 2015-03-06 22:35:16 +01:00
Thomas Waldmann 1f4077d870 crypto.pyx: adapt to strange requirements found in the openssl docs
https://www.openssl.org/docs/crypto/EVP_aes_256_cbc.html

EVP_DecryptInit_ex(), EVP_DecryptUpdate() and EVP_DecryptFinal_ex() are the corresponding decryption operations. EVP_DecryptFinal() will return an error code if padding is enabled and the final block is not correctly formatted. The parameters and restrictions are identical to the encryption operations except that if padding is enabled the decrypted data buffer out passed to EVP_DecryptUpdate() should have sufficient room for (inl + cipher_block_size) bytes unless the cipher block size is 1 in which case inl bytes is sufficient.

I doubt this is correct, but let's rather be defensive here.
2015-03-03 20:18:28 +01:00
Thomas Waldmann 550320535c crypto.pyx: cosmetic changes, added comments 2015-03-03 20:11:28 +01:00
Thomas Waldmann 6c7c2e2e40 cleanup crypto.pyx, make it easier to adapt to other modes
There were some small issues:

 a) it never called EVP_EncryptFinal_ex.
For CTR mode, this had no visible consequences as EVP_EncryptUpdate already yielded all ciphertext.
For cleanliness and to have correctness even in other modes, the missing call was added.

b) decrypt = encrypt hack
This is a nice hack to abbreviate, but it only works for modes without padding and without authentication.
For cleanliness and to have correctness even in other modes, the missing usage of the decrypt api was added.

c) outl == inl assumption
Again, True for CTR mode, but not for padding or authenticating modes.
Fixed so it computes the ciphertext / plaintext length based on api return values.

Other changes:
As encrypt and decrypt API calls are different even for initialization/reset, added a is_encrypt flag.

Defensive output buffer allocation. Added the length of one extra AES block (16bytes) so it would
work even with padding modes. 16bytes are needed because a full block of padding might get
added when the plaintext was a multiple of aes block size.

These changes are based on some experimental code I did for aes-cbc and aes-gcm.
While we likely won't ever want aes-cbc in attic (maybe gcm though?), I think it is cleaner
to not make too many mode specific assumptions and hacks, but just use the API as it
was meant to be used.
2015-03-03 19:19:28 +01:00
Thomas Waldmann aab900b169 extract: if --stdout is given, write all extracted binary data to stdout 2015-03-01 05:07:29 +01:00
Thomas Waldmann a3f335e0ff create: if "-" is given as path, read binary from stdin 2015-03-01 04:29:44 +01:00
Thomas Waldmann db7ce095d2 fix typos / spelling 2015-02-28 03:43:08 +01:00
Thomas Waldmann 8ffd4c4926 convert docstrings to triple-double-quoted 2015-02-28 03:24:30 +01:00
Thomas Waldmann a8ce0b8b8a remove unused imports 2015-02-28 03:09:01 +01:00
Thomas Waldmann 74768511e1 do os.fsync like recommended in the python docs (gets a fileno, not file object, also do a flush first) 2015-02-28 02:45:21 +01:00
Evan Hempel b425950f8b Extra debug information for 'fread failed' 2015-02-12 20:32:20 -05:00
Daniel Danner bffc419615 FUSE: reflect deduplication in allocated blocks
Instead of giving all files a fixed block count of 1, this assigns each
deduplicated chunk to a certain file. In effect, the cumulative file
size that is shown in the mountpoint accurately reflects the amount of
actual disk space needed for the repository (barring metadata overhead).

Although the block assignment is done arbitrarily, depending on the
user's access pattern, the sizes will be consistent within the entire
mount point. This facilitates the use of tools like du and ncdu for
inspecting the actual disk usage in a repository as opposed to just
looking at the original, uncompressed, non-deduplicated file sizes.
2015-01-23 16:43:45 +01:00
Daniel Danner 046b196bab Only allow whitelisted RPC calls in server mode
Without this check, the client is able to call any method of
RepositoryServer and Repository, potentially circumventing
restrict_to_paths or even run arbitrary code.
2015-01-11 14:06:59 +01:00
Jonas Borgström 4ab4ecc7af hashindex: Fix issue with file sizes larger than 2GB.
See: http://librelist.com/browser//attic/2015/1/6/does-attic-have-an-upper-data-size-limit/
2015-01-06 22:28:04 +01:00
Jonas Borgström b5a9085717 Fix Python 3.2 compatibility issue with noatime open().
Closes #164.
2015-01-03 23:12:47 +01:00
Jonas Borgström add59e4ab3 Prepare for future payload format change 2014-12-17 21:55:33 +01:00
Yuri D'Elia 15c8a6323f Normalize source/exclude paths before matching
This normalizes the file names in the dot directory when specified explicitly,
along with exclude/include patterns.

This fixes several mismatches when including relative paths that involve the
current directory.
2014-12-14 22:03:49 +01:00
Jonas Borgström 18641ae687 xattr: Fix issue with empty (0 bytes) xattr values.
Closes #106
2014-12-14 14:28:33 +01:00
Jonas Borgström 53f6738090 Merge pull request #111 from c4rlo/patch-1
fix typo in comment
2014-12-08 21:48:36 +01:00
Jonas Borgström 5d96434abd Merge pull request #113 from c4rlo/noatime
open files with O_NOATIME if possible
2014-12-08 21:48:04 +01:00
Jonas Borgström 7e15abd29c hashindex: Fix issue with indicies larger than 2GB 2014-11-22 14:41:24 +01:00
David Fries f22b62c1a4 limit create file permissions
Be safe by default, create files so that other users can't read them,
at least until the original permissions are set.
2014-10-31 20:02:12 -05:00
Jonas Borgström 678fdd1d42 Fix "Number of files" output for attic info.
Closes #124
2014-10-27 22:00:56 +01:00
Jonas Borgström 547fa0a590 Speed up initial repository access
Use os.listdir() instead of os.walk() to avoid unnecessary
stat() calls.

Closes #119
2014-10-10 21:01:55 +02:00
Jonas Borgström 7b9d129bcd Remove dead code 2014-10-09 20:43:58 +02:00
Jonas Borgström 5a69f58823 Introduce a separate exception for missing repository objects 2014-10-09 20:41:47 +02:00
Carlo Teubner f4804c07ca open files with O_NOATIME if possible 2014-09-12 22:22:08 +01:00
c4rlo ec73e45ae2 fix typo in comment 2014-09-07 13:54:18 +01:00
Jonas Borgström 21e03af56b Fix minor location parser bug.
Make sure the entire input is parsed.
2014-08-08 23:34:27 +02:00
Jonas Borgström 9f64e39d9f Reuse chunker buffer between files. 2014-08-03 15:04:41 +02:00
Jonas Borgström 193fb1fcd5 Added support for stripping leading path segments
closes #95
2014-08-02 22:15:21 +02:00
Jonas Borgström 8f4e0f7506 acl: Added workaround for old Linux systems
Really old Linux systems do not have extended_file_no_follow()
2014-08-01 15:50:18 +02:00
Jonas Borgström 1b0e21b95a Fixed typo 2014-07-10 15:44:29 +02:00
Jonas Borgström 2f72b9f960 HashIndex: Switch to a non-mmap based implementation
This eliminates unnecessary IO on low memory systems
2014-07-10 15:32:29 +02:00
Jonas Borgström 4b2dae29d4 Fix incorrect detect of follow_symlinks support
This only affects system with Python 3.3+ and a really old libc
2014-07-01 21:28:07 +02:00
Jonas Borgström 15065dbaa4 Fix sporadic "Resource temporarily unavailable" error
Issue reported on the mailing list while backing up to a remote
repository on OS X over a slow uplink.
2014-06-13 20:07:01 +02:00
Jonas Borgström 95162ce1f8 buzhash: One more test case
Test with more than 31 bytes to make sure our BARREL_SHIFT macro
works correctly.
2014-06-05 15:11:46 +02:00
Jonas Borgström df85e72d3c Fix file cache save bug 2014-06-03 23:10:52 +02:00
Jonas Borgström 243481f6da Fix test suite breakage 2014-06-03 22:00:34 +02:00
Jonas Borgström 80a2a4113f Revert "Reduce memory usage when backing up many small files"
The memory usage should be reduced a fair bit by #90 so this
might not be needed anymore. Or at least not enabled by default
2014-06-03 21:39:26 +02:00
Jonas Borgström 7f9fe03917 cache: Reduce file cache memory usage (#90)
The memory usage is reduced at the expence of extra msgpack
packing/unpacking. Hopefully this is a good tradeoff.

Ideally the entire cache should be replaced with a radix tree
but that will have to wait a bit.
2014-06-03 21:19:02 +02:00
Jonas Borgström 64cd6632a1 Avoid deadlock problems
Explicitly use write locks, instead of read locks (that are later
upgraded) unless we know we will never modify the repository
2014-05-31 15:39:51 +02:00
Jonas Borgström af3e78e6b2 Really fix EDEADLK bug 2014-05-31 15:17:06 +02:00
Jonas Borgström 9178d76ce7 Fix py3.2 specific EDEADLK related bug. 2014-05-31 15:15:56 +02:00
Jonas Borgström 3ab53b776d Fix crash on extreme mtime timestamps (year 2400+)
Closes #81
2014-05-18 18:28:26 +02:00
Jonas Borgström 11687fbec1 crypto: store EVP_CIPHER_CTX on the stack 2014-05-13 23:18:32 +02:00
Cyril Roussillon 0b4e324af2 chunker: optimized the barrel shift
move the modulo out of the barrel shift and use 32bits variables so
that the compiler recognizes it and uses the "rol*" asm instructions.

Before: 245 MiB/s
After: 338 MiB/s

CPU: Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz

Modification by Jonas: commit message formatting and added
Cyril Roussillon to AUTHORS
2014-05-13 23:05:13 +02:00
Jonas Borgström 7e258c8401 crypto: Improved AES performance
attic.crypto now uses the OpenSSL EVP API for AES encryption.
This API uses AES-NI instructions when available resulting in
a significant AES encryption performance improvement:

Before: 80MiB/s
After: 1931MiB/s

Message size: 64kiB
CPU: Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz
2014-05-13 22:33:58 +02:00
Jonas Borgström dd5c0aa0e3 acl: make darwin acl code numeric_owner aware 2014-05-03 23:22:55 +02:00
Jonas Borgström 47c6141aab Experimental OS X ACL support (#66) 2014-05-03 15:10:11 +02:00
Jonas Borgström 055a40910b Reduce memory usage when backing up many small files
Closes #69.
2014-05-03 13:35:48 +02:00
Jonas Borgström a87a019608 cachedir: Add CACHEDIR.TAG file to attic cache dirs 2014-05-01 14:56:21 +02:00
Jeremy Maitin-Shepard 1d5410a3cf Add --exclude-caches option, for excluding CACHEDIR.TAG directories
See http://www.brynosaurus.com/cachedir/spec.html
2014-04-30 14:57:21 -07:00
Jeremy Maitin-Shepard 1955484e1b testsuite/archiver.py: Fix misspelling regual -> regular 2014-04-30 14:43:32 -07:00
Jonas Borgström c502481d5e fix typo 2014-04-29 23:07:41 +02:00
Jonas Borgström 1b779c896d Linux ACL support improvements 2014-04-29 22:29:26 +02:00
Jonas Borgström 4bcc1b8ff9 Fix Cython issue on Linux 2014-04-27 14:29:03 +02:00
Jonas Borgström 8c25d02481 Experimental FreeBSD ACL support (nfs4 and posix) (#66) 2014-04-27 14:17:52 +02:00
Jonas Borgström 54e757e717 acl: Remove acl comments 2014-04-13 23:41:04 +02:00
Jonas Borgström 29f95bba68 Use a dedicated file for bsdflags tests 2014-04-13 21:52:49 +02:00
Jonas Borgström 14808b77cb Fix Python3.2 compatibility 2014-04-13 20:34:32 +02:00
Jonas Borgström 0ad5253d84 Experimental Linux ACL support (#66) 2014-04-13 20:26:46 +02:00
Jonas Borgström 8bf3bb1ca3 Added support for backup and restore of bsdflags (OS X and FreeBSD)
This improves our Backup-Bouncer score (#56)
2014-04-08 21:52:26 +02:00
Jonas Borgström 4bbde41466 Fix bug where xattrs on symlinks were not correctly restored 2014-04-08 21:22:57 +02:00
Jonas Borgström 02a8172eee docs: More improvements 2014-04-06 22:47:22 +02:00
Jonas Borgström ead1511948 docs: More documentation improvements 2014-04-06 15:16:25 +02:00
Jonas Borgström ccb7ea909f prune: Use the local time zone (not UTC) when interpreting time 2014-03-30 22:57:16 +02:00
Jonas Borgström 9ae3d10a99 cache: Properly clean up txn.tmp after a failed commit 2014-03-30 22:46:57 +02:00
Jonas Borgström 37cc63fc46 Fix one more -Werror=declaration-after-statement issue 2014-03-30 22:35:13 +02:00
Tung Dao 6d77808bec Fix for ISO C90 compliance 2014-03-30 22:43:31 +07:00
Jonas Borgström 1db4ba52f9 Make sure key files end with a new line 2014-03-28 22:56:40 +01:00
Jonas Borgström 8080f183d6 mount: Improve fuse filesystem memory efficiency
Closes #59
2014-03-28 22:51:09 +01:00
Jonas Borgström 3b80688959 mount: Load archive metadata on demand 2014-03-27 23:01:14 +01:00
Jonas Borgström af262482de mount: Use RepositoryCache
This makes a full repository mount a bit faster but it's still
too slow and memory hungry.
2014-03-26 22:42:20 +01:00
Jonas Borgström 8e078b5f91 Initial (naive) full repository fuse mount support 2014-03-26 22:06:53 +01:00
Jonas Borgström a9fc62cc9a Added option to restrict remote repository access to specific path(s)
With this option remote repository access can be restricted to a
specific path for a specific ssh key using the following line
in ~/.ssh/authorized_keys::

command="attic serve --restrict-to-path /data/clientA" ssh-rsa clientA's key
command="attic serve --restrict-to-path /data/clientB" ssh-rsa clientB's key

Closes #51.
2014-03-24 21:28:59 +01:00
Johann Klähn f47353e7ef accept names of other commands in help command 2014-03-21 22:12:15 +01:00
Jonas Borgström 8a1ebe0112 Added '--stats' option to attic prune and attic delete 2014-03-19 22:32:07 +01:00
Jonas Borgström 839dd94a59 prune: Delete all archives in a single transaction
This will improve performance and make the whole operation atomic
2014-03-19 21:58:25 +01:00
Jonas Borgström 80e7e637cc Make --stats output 78 characters wide 2014-03-19 21:52:49 +01:00
Jonas Borgström 92c333c071 Add a method to detect out of date binary extension modules 2014-03-18 22:04:08 +01:00
Jonas Borgström e398d5f632 Include "all archives" size information in "--stats" output.
Closes #54
2014-03-18 21:42:03 +01:00
Jonas Borgström c3ca45315b cache: Speed up cache rebuild by caching archive metadata requests 2014-03-13 22:29:47 +01:00
Jonas Borgström 0e39acffd3 crypto: convert attic.crypto into a cython module
This will give a slight performance boost and make the openssl
detection/linking more robust.
2014-03-10 22:50:38 +01:00
Jonas Borgström 90fe318809 Attempt to make the archive metadata resync more robust 2014-03-06 20:05:13 +01:00
Jonas Borgström 66a84c0c12 check: Fix a check --repair issue and added more tests 2014-03-06 12:05:22 +01:00
Jonas Borgström 9dce2362cc archive checkpoint: Reset timer after the checkpoint has been committed 2014-03-05 20:00:27 +01:00
Jonas Borgström 3193af5482 Remove explicit flush calls since line_buffering is enabled. 2014-03-05 19:58:29 +01:00
Jonas Borgström 11c08f412a check: No progreess output to stderr during archives check 2014-03-04 22:02:35 +01:00
Jonas Borgström 55a26e553f check: replace --phase with --repository/archives-only 2014-03-04 21:56:37 +01:00
Jonas Borgström 477e1a39dd check: Make sure all non-critical output is sent to stdout 2014-03-04 21:21:58 +01:00
Jonas Borgström a68e48bc30 check: Make item stream resync a bit more robust 2014-03-04 21:15:52 +01:00
Jonas Borgström 7be0ad609d Make the manifest rebuild code more robust
Try to make sure we've actually found msgpack data before feeding
it into msgpack.
2014-03-01 15:00:21 +01:00
Jonas Borgström 3982c34e6c Improve attic check documentation
Closes #24.
2014-02-26 23:13:48 +01:00
Jonas Borgström 678fb2c845 testsuite: Fix test test_prune_repository 2014-02-26 20:27:08 +01:00
Jonas Borgström 1b42da1fa5 Merge remote-tracking branch 'jdchristensen/prune-docs-info' 2014-02-26 20:26:37 +01:00
Jonas Borgström fd2f3ea634 Fix UnicodeEncodeError on verbose output of unicode paths
We can't assume that the stdout encoding is not less restrictive
than the filesystem encoding.
2014-02-25 12:33:23 +01:00
Dan Christensen 78c2ef6a13 When -v is specified with prune, also show the timestamp of each
archive, which is helpful for debugging.  Unify this with the
formatting done by "attic list".  The spacing is chosen so that
the attic prune output is 79 characters wide when the archive
names are at most 36 characters.
2014-02-24 19:46:56 -05:00
Dan Christensen 4c4018e1d7 Update prune documentation to use new command line options,
and also to say that the time that matters is the time each
backup completes.
2014-02-24 19:32:18 -05:00
Jonas Borgström a229db0dce check: More code cleanup 2014-02-24 23:37:21 +01:00
Jonas Borgström 9e8a944a2a check: archive metadata recovery improvements 2014-02-24 22:44:43 +01:00
Jonas Borgström c1e1d6e9dd repository: Fixed a potential infinite loop in recover_segment 2014-02-24 12:59:38 +01:00
Jonas Borgström 88ff981eee Ignore xattr errors during extract if not supported by the filesystem
Closes #46.
2014-02-23 13:15:57 +01:00
Jonas Borgström 6425d16aa8 repository: Fix potential race condition
If we crash between compact_segments() and write_index() and the
transaction deletes objects that are newer than the current index
might become undeleted.
2014-02-21 20:20:17 +01:00
Jonas Borgström bd22bc8cb2 Automatically replay segments to rebuild missing repository index 2014-02-20 23:49:35 +01:00
Dan Christensen 5d2d3f1f93 Add --dry-run option to prune. 2014-02-19 21:33:05 -05:00
Jonas Borgström e458f859d3 Added command line deprecation functionality
The following deprecations are currently handled:

- attic verify -> attic extract --dry-run
- attic prune --hourly|daily|... -> attic prune --keep-X
2014-02-19 22:53:44 +01:00
Jonas Borgström d551b13a23 Use StableDict in a few more places 2014-02-18 23:09:12 +01:00
Jonas Borgström 7b31f23722 Replace verify command with "extract --dry-run"
closes #25
2014-02-18 21:33:06 +01:00
Jonas Borgström 30daa23e42 Minor cleanup 2014-02-18 21:16:36 +01:00
Jonas Borgström 7bcb0f97d6 Slightly lower the number of file descriptors kept open
This is needed to support old version of sftp-server that only
support 100 open file descriptors. Closes #40.
2014-02-17 21:16:04 +01:00
Jonas Borgström 893120e609 attic check performance improvement and minor progress reporting changes 2014-02-17 18:25:25 +01:00
Jonas Borgström c394a31d62 Improved archive metadata deduplication. 2014-02-16 23:36:48 +01:00
Jonas Borgström d44fa850cd Fix exception during "attic create" with repeated files
Closes #39
2014-02-16 22:37:12 +01:00
Jonas Borgström 32e773c15d Implemented archive metadata checking and repair 2014-02-16 22:21:39 +01:00
Jonas Borgström 0d248192e5 Implemented Repository.list() 2014-02-10 21:55:22 +01:00
Jonas Borgström bbf490bf8b More repository check/repair improvements 2014-02-10 21:32:18 +01:00
Jonas Borgström 22548841a2 Merge pull request #38 from jdchristensen/quickstart
Quickstart and --weekly doc fixes
2014-02-10 12:50:57 +01:00
Dan Christensen a79acdd10c Correct --weekly help to say weekly, not daily. 2014-02-09 16:15:49 -05:00
Jonas Borgström ab1cf32071 Implemented hashindex.iteritems(marker=X) 2014-02-09 22:05:33 +01:00
Jonas Borgström 1e4fd4e18a PyBuffer_FromMemory should be a static function 2014-02-09 21:25:05 +01:00
Jonas Borgström 66fe7e5377 Removed redundant is_a_terminal function and minor check fixes. 2014-02-09 20:35:00 +01:00
Jonas Borgström 14dd0414eb Merge remote-tracking branch 'jdchristensen/help' 2014-02-09 20:30:57 +01:00
Jonas Borgström 1809ea2f3e More attic check --repair improvements 2014-02-09 16:05:04 +01:00
Jonas Borgström 33b58eac82 Initial check --repair support 2014-02-09 16:05:04 +01:00
Jonas Borgström 5898b3b935 Merge remote-tracking branch 'jdchristensen/prune-within'
Conflicts:
	attic/archiver.py
2014-02-09 16:04:32 +01:00
Dan Christensen b5483b79a4 Add a --within option to the prune command. 2014-02-08 15:37:27 -05:00
Dan Christensen 9d19550c1a Add support for --exclude-from. 2014-02-08 12:44:48 -05:00
Dan Christensen 020c4f802f return self.exit_code from do_help 2014-02-08 11:51:44 -05:00
Dan Christensen 989a86463c Escape the backslash in the help text. 2014-02-08 11:45:36 -05:00
Dan Christensen c0cb26613d On help on patterns. 2014-02-08 09:44:31 -05:00
Jonas Borgström 2252616f9e Repository code cleanup 2014-02-08 13:32:47 +01:00
Dan Christensen 4da8466b3b Fix a doc typo. 2014-02-07 18:10:52 -05:00
Dan Christensen b76a40c987 Simplify the ExcludePattern logic further, and explain. 2014-02-07 18:04:21 -05:00
Dan Christensen 8cc74be62e Simplify IncludePattern and add a few more tests to PatternTestCase. 2014-02-07 16:27:18 -05:00
Dan Christensen db9632532c Add one more test to PatternTestCase. 2014-02-07 16:04:06 -05:00
Dan Christensen 9c5e3d4ddc Fix minor bugs in IncludePattern and ExcludePattern, and speed up
ExcludePattern by storing a compiled regular expression.
2014-02-07 15:54:24 -05:00