diff --git a/COPYING b/COPYING new file mode 100644 index 0000000000000000000000000000000000000000..4f72d35e709024529fe95e2f039e0f36fea115e2 --- /dev/null +++ b/COPYING @@ -0,0 +1,20 @@ +Copyright (c) 2014, <ale@incal.net> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/changed.1 b/changed.1 new file mode 100644 index 0000000000000000000000000000000000000000..6f575f657edd97272b348b2a4490d093ad22642f --- /dev/null +++ b/changed.1 @@ -0,0 +1,86 @@ +.TH CHANGED 1 +.SH NAME +changed \- detects whether a file or directory have changed since the +last invocation +.SH SYNOPSIS +.BI "changed [--exclude=" pattern "] [--include=" pattern "] [--db=" path "] [--checksum] " "path ..." +.SH DESCRIPTION +.B changed +detects whether a file or directory tree have changed since the last +time the tool was invoked with those same arguments. It is primarily +meant to support configuration management logic, to restart services +when their configuration has changed. + +Arguments can be files or directories: in the latter case, +.B changed +will recursively scan the filesystem. You can control the recursion by +utilizing the +.I --exclude +and +.I --include +options. + +The tool stores its state in the directory specified by the +.I --db +option. It will compare the current state of the filesystem with how +it was the last time +.B changed +was invoked with the +.I exact +same arguments. + +.B changed +will always report that there have been changes whenever the request +specification changes subtly, such as if you invoke it with the same +paths but different +.I --exclude +options. +.SH OPTIONS +.TP +.B \-\-checksum +Use a hash of the file contents for comparisons, rather than relying +on filesystem attributes (size, modification time). This makes the +tool noticeably slower, as it has to read all the files, but it is +appropriate for configurations that are regenerated constantly. +.TP +.BI \-\-exclude= pattern +Exclude files matching +.I pattern +from the recursive filesystem scan. This option can be specified +multiple times. By default, +.B changed +excludes backup files and Debian configuration artifacts, but the +default exclude list can be reset by specifying an empty +.I pattern +to this option. +.TP +.BI \-\-include= pattern +Only include files matching +.I pattern +in the recursive filesystem scan. This option can be specified +multiple times. If this option is present, it takes precedence over +patterns specified with the +.I --exclude +option. +.TP +.BI \-\-db= path +Store checksums in the directory specified by +.I path +(by default this is /var/lib/changed if the current user has uid 0, +$HOME/.changed otherwise). +.SH "EXIT STATUS" +.B changed +will exit with status 0 if the specified files have changed (or if no +previous state was found), or 1 if they have not. This makes it +possible to use it with relatively intuitive semantics: +.PP +.nf +.RS +if changed /etc/foo; then restart-foo; fi +.RE +.fi +.PP +.SH AUTHOR +Ale <ale at incal dot net> +.SH BUGS +Plenty, but still unknown.