Nick
7367f85afe
Snapshot failure test and fix kopia panic for non-executable directories
...
Adding test to probe snapshot failure. Tests snapshot of non-existent source directory, and then iterates through file permissions for files, directories, and issues snapshot to the source. Permission combinations are applied to a parent directory of the source, source itself, contents of source root when the source is a directory, and contents of a subdirectory in that source root.
Fixing kopia executable panic when a directory's contents can't be read. Previously the only Lstat error responded to was not-exist, letting other errors fall through and passing a nil `os.FileInfo` to the following function call, resulting in panic.
2020-01-20 21:29:55 -08:00
Jarek Kowalski
de71f0f057
fs: added functions Update() and Remove() on fs.Entries which return a copy of entries with specified entry updated or removed
2020-01-05 09:13:41 -08:00
Jarek Kowalski
ac70a38101
lint: upgraded to 1.22.2 and make lint issues a build failure
...
fixed or silenced linter warnings, mostly due to magic numeric constants
2020-01-03 16:39:30 -08:00
Julio Lopez
1249a255d3
Allow copying to an existing directory
...
Add some logging
2020-01-02 13:49:28 -08:00
Julio Lopez
ac6e84107e
Add CopyOptions and copier structs
2020-01-02 13:49:28 -08:00
Julio Lopez
7361d277e0
Remove special-case handling when target is root directory
...
No longer needed since directories can be overwritten by default
2020-01-02 13:49:28 -08:00
Julio Lopez
8e9d56fcf2
Trivial: simplify localfs.Directory
2020-01-02 09:50:45 -08:00
Jarek Kowalski
503fa74be5
fs: added Directory.Child() method to look up children by name without necessarily loading all of them
2019-12-30 19:21:17 -08:00
Julio Lopez
ca9ba27c6f
Use github.com/natefinch/atomic.WriteFile in copyFileContents
2019-12-10 22:22:32 -08:00
Pavan Navarathna
fb57e828ad
Restore command
...
Behavior:
- Creates top directory on restore
- Fails when target directories or files already exist
- Allows restoring to local root directory
- Restores of file attributes => mod time, mode, owner info
- Only a directory can be specified as a parameter
Not implemented:
- Restoring attributes of the top folder
- Restoring symlinks
- Restoring a single file
2019-12-10 22:22:32 -08:00
Jarek Kowalski
f6d59608ab
upload: require *policy.Tree for each upload
2019-12-07 14:24:57 -08:00
Jarek Kowalski
b68ef7d781
refactored policy types and policy.Getter
2019-12-06 23:53:22 -08:00
Jarek Kowalski
6217df1a87
lint: switched to 1.21 and fixed a ton of whitespace issues discovered
...
by new wsl linter
2019-11-26 06:49:49 -08:00
Julio Lopez
40c6f6fc88
Simple test for Cache.getEntries() locking/unlocking.
...
See #130 and #132
2019-11-15 18:58:42 -08:00
Julio Lopez
a445c80ef2
Make Cache.mu a syncLocker
2019-11-15 18:58:42 -08:00
Julio Lopez
c5cb83c2e3
Rename Cache.c.getEntriesFromCacheLocked
...
Follows the naming convention for the locking requirements
2019-11-09 12:26:27 -08:00
Julio Lopez
467243f23c
Remove unnecessary unlock() in Cache.getEntriesFromCache
...
Motivation:
- Consistent locking/unlocking `c.mu` in `Cache.getEntries`
- Fix CI failure
`Cache.getEntriesFromCache()` was releasing `c.mu` when returning an
entry and not releasing it when returning nil. Previously, the caller
(`Cache.getEntries`) was accordingly not releasing `c.mu` when
`getEntriesFromCache()` was returning an entry, and unlocking `c.mu`
otherwise.
`Cache.getEntries` is the only caller for `getEntriesFromCache`.
After this change c.mu is consistently locked and unlocked in
`getEntries`
2019-11-09 12:26:27 -08:00
Julio Lopez
34661d7f5e
Ensure Mutex.Unlock() in cachefs.Cache.getEntries()
2019-11-07 18:01:17 -08:00
Jarek Kowalski
0654e30b26
linter: upgraded to golangci-lint 1.18.0, fixed or suppressed warnings
2019-09-11 06:42:08 -07:00
Jarek Kowalski
10d5102cd6
localfs: improved performance and memory usage when scanning large directories
...
- parallelized os.Lstat() x 16 (dramatically improves speed)
- discarded unused portions of os.FileInfo (uses 60% less RAM on macOS)
BEFORE:
10:47:03.670 [kopia/localfs] listed 200000 entries in 43.871211686s using 79126528 bytes of heap
After:
10:49:12.439 [kopia/localfs] listed 200000 entries in 1.953018184s using 30515200 bytes of heap
2019-08-24 11:51:16 -07:00
Jarek Kowalski
ae1510b65c
Deprecate hashcache and replace it with simply walking previous snapshot directory tree.
...
This cleans up the code a lot and removes many ugly hacks.
The performance is pretty reasonable and with separate metadata cache it's likely to stay that way.
2019-06-08 18:01:47 -07:00
Jarek Kowalski
72520029b0
golangci-lint: added more linters
...
Also fixed pre-existing lint errors.
2019-06-02 22:56:57 -07:00
Jarek Kowalski
1a7a02ddbe
cleanup imports by grouping all local imports together
2019-06-01 10:57:55 -07:00
Jarek Kowalski
63303904e1
switched remaining fmt.Errorf to errors.Wrap()
2019-06-01 10:57:05 -07:00
Jarek Kowalski
0c41d41276
Fixed up paths after merge
2019-05-27 15:48:39 -07:00
Jarek Kowalski
a6a153b22e
switched fmt.Errorf() to errors.Wrap()
2019-05-11 12:34:14 -07:00
Jarek Kowalski
fdfd336d6e
lint: fixed various linter issues
2019-04-01 18:59:48 -07:00
Jarek Kowalski
242d012a54
removed fs.EntryMetadata and replaced fs.Entry with os.FileInfo + small additions
2018-11-03 11:28:06 -07:00
Jarek Kowalski
327d8317d8
refactored repo/ into separate github.com/kopia/repo/ git repository
2018-10-26 20:40:57 -07:00
Jarek Kowalski
c999c0fba8
moved fs/repofs to snapshot/snapshotfs
2018-10-20 11:36:14 -07:00
Jarek Kowalski
906b8eaee3
plumbed through context to all manifest manager methods and switched to lazy initialization
2018-09-13 15:34:29 -07:00
Jarek Kowalski
91066f2469
reorganized low-level repository packages by moving them all under kopia/kopia/repo/
2018-08-30 22:01:05 -07:00
Jarek Kowalski
6484a55d7c
removed policy.Manager and snapshot.Manager and switched to package-level function interface instead
2018-08-30 06:47:58 -07:00
Jarek Kowalski
9060e7d310
moved repository VFS nodes into fs/repofs/ package
2018-08-29 22:56:23 -07:00
Jarek Kowalski
6587ade1f9
cli: added 'policy edit' command which launches an editor and allows user to edit policy JSON directly
2018-08-20 19:07:44 -07:00
Jarek Kowalski
1ff003c820
added internal lib for gitignore-style pattern matching
...
added 'ignorefs' which transparently hides all files according to .kopiaignore, which is very similar to .gitignore
2018-08-19 11:48:55 -10:00
Jarek Kowalski
5d73d18347
removed Parent from fs.Entry
2018-08-19 11:32:17 -10:00
Jarek Kowalski
c57531b751
switched Go logging library to github.com/op/go-logging which lets us override log levels per module
2018-07-09 21:28:12 -07:00
Jarek Kowalski
e36d02c59b
emit per-dir incomplete reason
...
store entire rootEntry on snapshot nmanifest
format 'snapshot list' consistently for both root and nested items
2018-05-19 22:00:14 -07:00
Jarek Kowalski
12c28e537d
simplified ObjectID code and changed it to a string
2018-05-09 22:22:37 -07:00
Jarek Kowalski
d8201229d8
plumbed through ctx in storage.Storage APIs and all uses
2018-04-03 17:39:54 -07:00
Jarek Kowalski
1c4e0e1e47
removed legacy oid format
2018-03-19 19:31:03 -07:00
Jarek Kowalski
453bab3560
fixed some lint errors, mostly dead code and missing error checks
2018-03-19 12:26:28 -07:00
Jarek Kowalski
10ca234633
switched to using zerolog for logging, by default log level=info, can be set to debug on commandline
2018-01-01 19:12:35 -08:00
Jarek Kowalski
31e5bce1cb
moved object management to kopia/kopia/object
2017-10-14 16:38:22 -07:00
Jarek Kowalski
371fc15694
merged 'repofs' into 'snapshot' package
2017-09-04 20:26:25 -07:00
Jarek Kowalski
b08a35e92b
refactored FS cache into reusable wrapper that can be applied on top of any filesystem abstraction
2017-09-04 17:42:50 -07:00
Jarek Kowalski
998ed1ddac
simplified MetadataManager API for listing, added caching of metadata items (unbounded for now)
...
disabled go <1.9 since we're now using t.Helper(), which is awesome
2017-08-29 21:46:51 -07:00
Jarek Kowalski
e01fcff9a4
fixed sorting of synthetic fs.Entries
2017-08-27 14:49:15 -07:00
Jarek Kowalski
2b887b0b2e
changed fs.Reader to be a Seeker too
2017-08-27 08:58:59 -07:00