Dependency Checking¶
Checkers determine whether a task is complete or not. Tasks may have zero or more checkers. There is no default checker, without one tasks will alwaus execute. Adding a checker allows the task to be skipped if it is already complete. There are built-in checkers and an api for creating custom checkers.
Task dependencies are also checked. Branches that are complete will be skipped. Checks cascade from dependencies. If a dependency is rebuilt, that branch and the root will be rebuilt.
Checkers may be overridden with --force or implicitly with --clean. Use
--force-all or --clean to override dependency checks too.
To view the status of checks use ix help <task>.
Custom Checkers¶
Custom checkers may be created by subclassing Checker and implementing
state, filename, and clone.
from ixian.checker import Checker
class MyChecker(Checker):
def state(self):
return {'fake': 'state'}
def filename(self):
return 'custom_checker'
def clone(self):
pass
State¶
state must return an object representing the state being checked. Generally,
this should be a hash or a dict of hashes. The state should accurately
represent the changes you want to include. For example, a file checker might
return a hash of one or morefiles file’s contents but ignore permission flags.
Filename¶
filename returns a deterministic filename for the input to the checker. All
state is stored in json files located in {CONFIG.BUILDER}/{filename}. The
contents are the state from the last successful run. The current state will
be compared against the stored value during subsequent runs.
Clone¶
clone must return a copy of the checker with the same parameters.
TODO: This was to support checkers that cached properties. This may not be used any longer so it can probably go away.
Checker Storage¶
All state is stored in json files located in {CONFIG.BUILDER}/checks. If a
state file doesn’t exist a task is incomplete.
Checker Subclasses¶
SingleKeyChecker¶
SingleKeyChecker is a helper subclasses that implements support for hashing
a single input (key).
from ixian.checker import SingleKeyChecker
class MyChecker(SingleKeyChecker):
def state(self):
return 'fake_state'
check = MyChecker('fake_key')
filename returns a hash of the single key.
state must be implemented by subclasses.
MultiValueChecker¶
MultiValueChecker is a helper subclass that implements support for multiple
inputs of the same type. For example, it is used by [FileHash](#FileHash) to
support multiple paths.
from ixian.checker import MultiValueChecker
class MyChecker(MultiValueChecker):
def state(self):
return 'fake_state'
check = MyChecker('fake_key_1', 'fake_key_2')
filename returns a hash of the list of keys.
state must be implemented by subclasses.
Built-in Checkers¶
FileHash¶
FileHash checks the sha256 hash for a set of file paths. Paths may point to files or directories.
from ixian.check import FileHash
Checker(
'/path/to/my/file',
'/path/to/my/other/file',
'/path/to/my/directory',
'/wildcard/*'
)
File hashes are a sha256 hash including the permissions, contents, and uid/gid flags for the file.
Directory hashes include the names and hashes of each file and directory the directory contains. Directory permissions, uid, and gid are also hashed.
Paths may contain unix style wildcards. Wildcard patterns will hash the set of files that match including the filenames.