Changelog¶
0.7.0¶
Initial open-source release! GitHub Milestone
New Features¶
- Add
HostAccessor, a factory forHostControlSysteminstances - Add
Commands.isLocalandMoreFiles.isLocal
API Changes¶
- Change URIs of SSH systems to
file+sshandexec+ssh - Replace
SshHostwithSshHostAccessor - Rename SSH credential classes to
PasswordSshCredentialandPublicKeySshCredential - Remove
HostControlSystems; useHostAccessors.getDefault().open()to get the defaultHostControlSystem - Replace
SystemConverterwithSystemUpgrader - Remove reverse DNS resolution during
Hostcreation
Fixes and Improvements¶
- Fix integer overflow when resizing buffers
- Reads from
CommandFuturestreams no longer consume output that would otherwise be available when creatingCommandResultinstances. - Add windowing to standard output and error streams, allowing clients to optionally discard data
- Fix size attribute for empty files when using SSH
- Throw
ClosedExecutionSystemExceptionwhen calling methods on a closed execution system - Improve exception message when a command times out
- Many build and documentation changes
0.6.0¶
New Features¶
- Add
Commands.toResult
API Changes¶
- Redesign interactive execution API:
ShellConversationandCommandOutputTriggernow useResponseProviderimplementations to get responses for specific output - Update Guava to 18.0; earlier versions work but are not supported
Fixes and Improvements¶
- Fix serious buffering bug that could cause incorrect command input and output
- Fix issue when recursively removing permissions from local directories
- GIRAFFE-18: Improve localhost resolution when creating
Hostobjects - Update to SLF4J 1.7.9 and fix version conflict
- Improve and publish documentation
0.5.0¶
New Features¶
- Add
SystemConverterutility. This allows users to convert a file system into an execution system and vice versa with minimal resource duplication. - Fix GIRAFFE-6: Add
MoreFiles.deleteRecursiveIfExists
API Changes¶
RemoteHostAccessornow opensHostControlSysteminstances instead of individual file and execution systems- Rename
CommandEnvironmentmethods - Change
CommandBuilder#addArgumentssignature to avoid overload conflict - Remove ‘giraffe-controllers’ project;
PreferencesFileis now part of a separate library
Fixes and Improvements¶
- Fix GIRAFFE-13: Set write mode for files when copying between SSH hosts
- Fix issue that prevented some exceptions from cancelling execution
- Improve SSH process cancellation
- Register shutdown hooks for local processes
- Improve documentation for many classes
0.4.2¶
- GIRAFFE-12: Add support for local environment filtering. To enable, set the
giraffe.command.local.envWhitelistsystem property to a comma-separated list of variables allowed in command process environments. - Include host information in SSH debug logs. Use the
giraffe-ssh-hostMDC key in appender patterns to see this information.
0.4.1¶
- Fix GIRAFFE-11:
TempPath#close()failed if the path did not exist - Fix stack traces of exceptions thrown by execute methods in
Commands. Previously, these exceptions only had internal stack traces, meaning information about the caller was lost.
0.4.0¶
Command Execution¶
- Include more information in
CommandExceptionmessages, including the full command output and the URI of the execution system - Rename
Command#getCommand()togetExecutable() - Change
Command#getArguments()to return a list of strings - Implement
toString(),equals(), andhashCode()forCommand - Move command working directory to
CommandContext - Support working directories for SSH commands
- Remove dependency on Apache commons-exec
- Fix GIRAFFE-9: properly escape local command arguments
Other Changes¶
- Add SSH system debug logging
- Add
MoreFiles#copyLargewhich significantly improves the speed of large file transfers between the local machine and SSH hosts - Significantly improve the speed of certain recursive copy operations
- Convert
HostControlSystemto an interface. Move creation methods toHostControlSystems.
0.3.6¶
- Fix missing provider issue when opening an SSH execution system from an SSH file system with a non-standard class loader configuration
0.3.5¶
- Fix GIRAFFE-10: closing an SSH system does not stop all threads
0.3.4¶
- Add additional factory methods to
CommandContext - Fix
deleteIfExistsfor SSH implementation - Fix GIRAFFE-5: localhost lookup can fail on OS X
- Standardize exit status checks for command execution. Exit status is now
checked by all
executemethods and throws consistent exceptions.
0.3.3¶
- Fix
UniformPathtoPathconversion
0.3.2¶
- Fix escaping for arguments that start with a single quote
- Fix argument check that broke reading output from local commands
0.3.1¶
- Fix bug when using append mode to write to an empty file via SSH
0.3.0¶
Command Execution¶
- Add asynchronous command execution
- Implement timeout handling for commands. Timeouts are specified when calling
executemethods, rather than as part of the context. - Remove
executeUnverified. Instead, disable exit status checking inCommandContext. - Add interactive command execution. Use
ShellConversationto interact with commands or useCommandOutputTriggerto run arbitrary code when command output matches a pattern.
Other Breaking Changes¶
- Rename
giraffe.remotepackage togiraffe.host - Rename
Files2toMoreFiles
Other Changes¶
- Use SSHJ to implement SSH operations. This library provides a cleaner API, better functionality, and more active development.
- Improve performance of recursive permission operations
- Add
listDirectoryandisEmptyto MoreFiles - Fix unexpected output from
MoreFiles.write - Expose information stored in SSH credential objects to clients
- Improve file system test coverage
0.2.1¶
- Fix issues reading SSH streams with certain buffer sizes
- Fix local execution system URI
- Add ability to execute commands with arbitrary environments
- Use
UniformPathfor command working directories - Improve API documentation
0.2.0¶
- Remove caching for SSH systems, allowing clients to open multiple systems for a given host
- Remove interactive command execution since it is not supported. This will be added again in a later release
- Remove
Accessibleinterfaces; replaceSystemAccessiblewithRemoteHostAccessor - Add
HostControlSystem, a container for aFileSystemandExecutionSystemtargeting the same host - Add
getCommand(Path, Object...)overload - Fix classloading issue when
SshHostis loaded in a non-standard classloader
0.1.3¶
- Fix race condition when reading SSH command output
Files2.defaultDirectoryreturns an absolute path- Exclude the
.and..meta-entries from directory streams
0.1.2¶
- Fix reading output from SSH commands
- Add missing separator between
firstandmorepath components
0.1.1¶
- Downgrade Ganymed SSH2 to build251beta1 for better compatibility with other projects
- Fix extra leading slash in absolute SSH paths
- Fix
getParent()for single-element paths - Throw exception if SSH authentication fails
0.1.0¶
Core Features¶
- Support basic local command execution
- Support basic remote command execution over SSH
- Support common remote file system operations over SSH
Utilities¶
- Add
Files2to supplementjava.nio.file.Files - Add
TempPathfor auto-deleting temporary files - Add
PreferencesFile - Add
UniformPath, ajava.nio.file.Path-like object without a file system reference
Base File System¶
Utilities for custom file system implementations
- Annotation based attribute access
- Glob-to-regex conversion
- Immutable, list-based
java.nio.file.Pathimplementation