From 6ae9a83dbd25813f9f460a57a118d1ad27654dbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Mon, 3 Oct 2011 01:09:04 +0300 Subject: [PATCH] Complete & simplify the CHANGELOG --- CHANGELOG.md | 198 +++++++++++++++++++++++++-------------------------- 1 file changed, 98 insertions(+), 100 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ddec5a..2799b4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,45 +1,51 @@ +## Master + +### Bug fix + +- [#149](https://github.com/guard/guard/issues/149) & [#150](https://github.com/guard/guard/pull/150): Fix issue where interator thread was continuing to capture input from stdin while a guard is being executed. (reported by @hardipe, fixed by [@f1sherman][]) + ## 0.8.3 - October 1, 2011 -### Bugs fixes: +### Bug fix -- Pull request [#145](https://github.com/guard/guard/pull/145): Fix over-utilization of CPU in Interactor. ([@johnbintz][]) +- [#145](https://github.com/guard/guard/pull/145): Fix over-utilization of CPU in Interactor. ([@johnbintz][]) -### Improvement: +### Improvements -- Pull request [#146](https://github.com/guard/guard/pull/146): Use a mutex instead of a lock for more efficient/simple locking. ([@f1sherman][]) +- [#146](https://github.com/guard/guard/pull/146): Use a mutex instead of a lock for more efficient/simple locking. ([@f1sherman][]) - Make Guard implementation of `:task_has_failed` simple. ([@netzpirat][]) ## 0.8.2 - September 30, 2011 -### Bugs fixes: +### Bug fix - Fixed guard stop to prevent run_guard_task(:stop) to be skipped [guard-spork issue #28](https://github.com/guard/guard-spork/issues/28). ([@thibaudgg][]) -### Improvement: +### Improvement - Update docs regarding :task_has_failed. ([@netzpirat][]) ## 0.8.1 - September 29, 2011 -### Bugs fixes: +### Bug fix -- Pull request [#144](https://github.com/guard/guard/pull/144): Fix `guard init`. (reported by [@fabioyamate][], fixed by [@rymai][]) +- [#144](https://github.com/guard/guard/pull/144): Fix `guard init`. (reported by [@fabioyamate][], fixed by [@rymai][]) ## 0.8.0 - September 28, 2011 -### Bugs fixes: +### Bug fixes -- Pull request [#137](https://github.com/guard/guard/pull/137): Fix interacting with tools like ruby-debug. ([@hron][] & [@netzpirat][]) -- Pull request [#138](https://github.com/guard/guard/pull/138): Fixed comments in example scaffold to reference interactions. ([@rmm5t][] & [@netzpirat][]) +- [#137](https://github.com/guard/guard/pull/137): Fix interacting with tools like ruby-debug. ([@hron][] & [@netzpirat][]) +- [#138](https://github.com/guard/guard/pull/138): Fixed comments in example scaffold to reference interactions. ([@rmm5t][] & [@netzpirat][]) -### New feature: +### New feature -- Pull request [#136](https://github.com/guard/guard/pull/136): New CLI `:watch_all_modifications`/`-A` option to watch for deleted and moved files too. ([@limeyd][] & [@netzpirat][]) -- Issue [#97](https://github.com/guard/guard/issues/97): Guard dependencies. Task execution can now be halted if a Guard throws `:task_has_failed` and `Guard::Dsl#group` options include `:halt_on_fail => true`. ([@rymai][]) -- Issue [#121](https://github.com/guard/guard/issues/121): `Guard.guards` and `Guard.groups` are now smart accessors. Filters can be passed to find a specific Guard/group or several Guards/groups that match (see YARDoc). ([@rymai][] & [@ches][]) +- [#136](https://github.com/guard/guard/pull/136): New CLI `:watch_all_modifications`/`-A` option to watch for deleted and moved files too. ([@limeyd][] & [@netzpirat][]) +- [#97](https://github.com/guard/guard/issues/97): Guard dependencies. Task execution can now be halted if a Guard throws `:task_has_failed` and `Guard::Dsl#group` options include `:halt_on_fail => true`. ([@rymai][]) +- [#121](https://github.com/guard/guard/issues/121): `Guard.guards` and `Guard.groups` are now smart accessors. Filters can be passed to find a specific Guard/group or several Guards/groups that match (see YARDoc). ([@rymai][] & [@ches][]) - New `Guard::Group` class to store groups defined in Guardfile (with `Guard::Dsl#group`). ([@rymai][]) -### Improvement: +### Improvements - Specs refactoring. ([@netzpirat][]) - Full YARD documentation. ([@netzpirat][] & a little of [@rymai][]) @@ -53,233 +59,224 @@ - Posix Signals handlers (`Ctrl-C`, `Ctrl-\` and `Ctrl-Z`) are no more supported and replaced by `$stdin.gets`. Please refer to the "Interactions" section in the README for more information. ([@thibaudgg][]) - JRuby & Rubinius support (beta). ([@thibaudgg][] & [@netzpirat][]) -### New feature: +### New features -- Pull request [#42](https://github.com/guard/guard/pull/42): New DSL method: `callback` allows you to execute arbitrary code before or after any of the `start`, `stop`, `reload`, `run_all` and `run_on_change` guards' method. New [Wiki page](https://github.com/guard/guard/wiki/Hooks-and-callbacks) for documenting it. ([@monocle][] & [@rymai][]) +- [#42](https://github.com/guard/guard/pull/42): New DSL method: `callback` allows you to execute arbitrary code before or after any of the `start`, `stop`, `reload`, `run_all` and `run_on_change` guards' method. New [Wiki page](https://github.com/guard/guard/wiki/Hooks-and-callbacks) for documenting it. ([@monocle][] & [@rymai][]) - Ability to 'pause' files modification listening. Please refer to the "Interactions" section in the README for more information. ([@thibaudgg][]) -### Improvement: +### Improvement - Remove the need to scan the whole directory after guard's `run_on_change` method. ([@thibaudgg][]) ## 0.6.3 - September 1, 2011 -### New features: +### New features -- Pull request [#130](https://github.com/guard/guard/pull/130): Adds `ignore_paths` method to DSL. ([@ianwhite][]) -- Pull request [#128](https://github.com/guard/guard/pull/128): Users can add additional settings to `~/.guard.rb` that augment the existing Guardfile. ([@tpope][]) +- [#130](https://github.com/guard/guard/pull/130): Adds `ignore_paths` method to DSL. ([@ianwhite][]) +- [#128](https://github.com/guard/guard/pull/128): Users can add additional settings to `~/.guard.rb` that augment the existing Guardfile. ([@tpope][]) ## 0.6.2 - August 17, 2011 -### Bugs fixes: +### Bug fixes - Re-add the possibility to use the `growl` gem since the `growl_notify` gem this is currently known to not work in conjunction with Spork. ([@netzpirat][]) - Ensure that scoped groups and group name are symbolized before checking for inclusion. ([@rymai][]) -### New features: +### New features - Groups are now stored in a `@groups` variable (will be used for future features). ([@rymai][]) - Guards will now receive their group in the options hash at initialization (will be used for future features). ([@rymai][]) -### Improvement: +### Improvement - Explain the growl/growl_notify differences in the README. ([@netzpirat][]) ## 0.6.1 - August 15, 2011 -### Bugs fixes: +### Bug fixes -- Pull request [#120](https://github.com/guard/guard/pull/120): remove `guardfile_contents` when re-evaluating so that the Guardfile gets reloaded correctly. ([@mordaroso][]) -- Pull request [#119](https://github.com/guard/guard/pull/119): `Dsl.evaluate_guardfile` uses all groups if none specified. ([@ches][]) +- [#120](https://github.com/guard/guard/pull/120): remove `guardfile_contents` when re-evaluating so that the Guardfile gets reloaded correctly. ([@mordaroso][]) +- [#119](https://github.com/guard/guard/pull/119): `Dsl.evaluate_guardfile` uses all groups if none specified. ([@ches][]) ## 0.6.0 - August 13, 2011 -### Bugs fixes: +### Bug fixes - Pull request [#107](https://github.com/guard/guard/pull/107): Small spelling fix. ([@dnagir][]) - `Dir.glob` now ignores files that don't need to be watched. ([@rymai][]) -### New features: +### New feature - Pull request [#112](https://github.com/guard/guard/pull/112): Add `list` command to CLI. ([@docwhat][]) -### Improvements: +### Improvements -- Pull request [#99](https://github.com/guard/guard/pull/99): [OS X] Switch from growl gem to growl_notify gem. ([@johnbintz][]) -- Pull request [#115](https://github.com/guard/guard/pull/115): [Linux] Add `:transient => true` to default libnotify options. ([@zonque][]) -- Pull request [#95](https://github.com/guard/guard/pull/95): Output system commands and options to be executed when in debug mode. ([@uk-ar][] and [@netzpirat][]) +- [#99](https://github.com/guard/guard/pull/99): [OS X] Switch from growl gem to growl_notify gem. ([@johnbintz][]) +- [#115](https://github.com/guard/guard/pull/115): [Linux] Add `:transient => true` to default libnotify options. ([@zonque][]) +- [#95](https://github.com/guard/guard/pull/95): Output system commands and options to be executed when in debug mode. ([@uk-ar][] and [@netzpirat][]) - `Guard::Dsl.revaluate_guardfile` has been renamed to `Guard::Dsl.reevaluate_guardfile`. ([@rymai][]) - New CLI options: ([@nestegg][]) - `watchdir`/`-w` to specify the directory in which Guard should watch for changes, - `guardfile`/`-G` to specify an alternate location for the Guardfile to use. -- Pull request [#90](https://github.com/guard/guard/pull/90): Refactoring of color handling in the `Guard::UI`. ([@stereobooster][]) +- [#90](https://github.com/guard/guard/pull/90): Refactoring of color handling in the `Guard::UI`. ([@stereobooster][]) ## 0.5.1 - July 2, 2011 -### Bugs fixes: +### Bug fix - Fixed `guard show` command. ([@bronson][] & [@thibaudgg][]) ## 0.5.0 - July 2, 2011 -### New features: +### New features - Guard::Ego is now part of Guard, so Guardfile is automagically re-evaluated when modified. ([@thibaudgg][]) -- Pull request [#91](https://github.com/guard/guard/pull/91): Show Guards in Guardfile with the `guard -T`. ([@johnbintz][]) +- [#91](https://github.com/guard/guard/pull/91): Show Guards in Guardfile with the `guard -T`. ([@johnbintz][]) -### Improvements: +### Improvements -- Issue [#98](https://github.com/guard/guard/issues/98): Multiple calls per watch event on linux with rb-inotify. ([@jeffutter][] & [@netzpirat][]) -- Pull request [#94](https://github.com/guard/guard/pull/94): Show backtrace in terminal when a problem with a watch action occurs. ([@capotej][]) -- Pull request [#88](https://github.com/guard/guard/pull/88): Write exception trace in the terminal when a supervised task fail. ([@mcmire][]) +- [#98](https://github.com/guard/guard/issues/98): Multiple calls per watch event on linux with rb-inotify. ([@jeffutter][] & [@netzpirat][]) +- [#94](https://github.com/guard/guard/pull/94): Show backtrace in terminal when a problem with a watch action occurs. ([@capotej][]) +- [#88](https://github.com/guard/guard/pull/88): Write exception trace in the terminal when a supervised task fail. ([@mcmire][]) - Color in red the "ERROR:" flag when using `UI.error`. ([@rymai][]) -- Issue [#79](https://github.com/guard/guard/issues/79) and Pull request [#82](https://github.com/guard/guard/pull/82): Improve INotify support on Linux. ([@Gazer][] & [@yannlugrin][]) -- Issue [#12](https://github.com/guard/guard/issues/12) and Pull request [#86](https://github.com/guard/guard/pull/86): Eventually exits with SystemStackError. ([@stereobooster][]) -- Pull request [#84](https://github.com/guard/guard/pull/84): Use RbConfig instead of obsolete and deprecated Config. ([@etehtsea][]) -- Pull request [#80](https://github.com/guard/guard/pull/80): Watching dotfile (hidden files under unix). (reported by [@chrisberkhout][], fixed by [@yannlugrin][]) +- [#79](https://github.com/guard/guard/issues/79) and Pull request [#82](https://github.com/guard/guard/pull/82): Improve INotify support on Linux. ([@Gazer][] & [@yannlugrin][]) +- [#12](https://github.com/guard/guard/issues/12) and Pull request [#86](https://github.com/guard/guard/pull/86): Eventually exits with SystemStackError. ([@stereobooster][]) +- [#84](https://github.com/guard/guard/pull/84): Use RbConfig instead of obsolete and deprecated Config. ([@etehtsea][]) +- [#80](https://github.com/guard/guard/pull/80): Watching dotfile (hidden files under unix). (reported by [@chrisberkhout][], fixed by [@yannlugrin][]) - Clear the terminal on start when the `:clear` option is given. ([@rymai][]) - Rename home directory Guardfile to `.Guardfile`. ([@tpope][]) ## 0.4.2 - June 7, 2011 -### Bugs fixes: +### Bug fixes - Fixed Guard::Version in ruby 1.8.7 ([@thibaudgg][]) - Fix ([@mislav][]) link in CHANGELOG (Note: this is a recursive CHANGELOG item). ([@fnichol][]) ## 0.4.1 - June 7, 2011 -### Improvements: +### Improvements -- Pull request [#77](https://github.com/guard/guard/pull/77): Refactor `get_guard_class` to first try the constant and fallback to require + various tweaks. ([@mislav][]) +- [#77](https://github.com/guard/guard/pull/77): Refactor `get_guard_class` to first try the constant and fallback to require + various tweaks. ([@mislav][]) - Notifier improvement, don't use system notification library if could not be required. ([@yannlugrin][]) ## 0.4.0 - June 5, 2011 -### Bugs fixes: +### Bug fix - In Ruby < 1.9, `Symbol#downcase` doesn't exist! ([@rymai][]) -### New features: +### New features -- Pull request [#73](https://github.com/guard/guard/pull/73): Allow DSL's `group` method to accept a Symbol as group name. ([@johnbintz][]) -- Pull request [#51](https://github.com/guard/guard/pull/51): Allow options (like `:priority`) to be passed through to the Notifier. ([@indirect][] & [@netzpirat][]) +- [#73](https://github.com/guard/guard/pull/73): Allow DSL's `group` method to accept a Symbol as group name. ([@johnbintz][]) +- [#51](https://github.com/guard/guard/pull/51): Allow options (like `:priority`) to be passed through to the Notifier. ([@indirect][] & [@netzpirat][]) -### Improvements: +### Improvement -- Pull request [#74](https://github.com/guard/guard/pull/74): Added link definitions to make the CHANGELOG more DRY! That's for sure now, we have the cleanest CHANGELOG ever! (even the link definitions are sorted alphabetically!) ([@pcreux][]) +- [#74](https://github.com/guard/guard/pull/74): Added link definitions to make the CHANGELOG more DRY! That's for sure now, we have the cleanest CHANGELOG ever! (even the link definitions are sorted alphabetically!) ([@pcreux][]) ## 0.4.0.rc - May 28, 2011 -### Bugs fixes: +### Bug fixes -- Pull request [#69](https://github.com/guard/guard/pull/69): Fixed typo in README: `Ctr-/` => `Ctr-\`. ([@tinogomes][]) -- Pull request [#66](https://github.com/guard/guard/pull/66): Support for dashes in guard names. ([@johnbintz][]) +- [#69](https://github.com/guard/guard/pull/69): Fixed typo in README: `Ctr-/` => `Ctr-\`. ([@tinogomes][]) +- [#66](https://github.com/guard/guard/pull/66): Support for dashes in guard names. ([@johnbintz][]) - Require `guard/ui` because `Guard::Notifier` can be required without full Guard. ([@yannlugrin][]) - Handled quick file (<1s) modification. Avoid to catch modified files without content modification (sha1 checksum). ([@thibaudgg][] & [@netzpirat][]) - Fixed `Guard::Notifier` (when growl/libnotify not present). ([@thibaudgg][]) - Fixed Rubygems deprecation messages. ([@thibaudgg][]) -### New features: +### New features -- Pull request [#67](https://github.com/guard/guard/pull/67): Allow Guardfile in `$HOME` folder. ([@hashrocketeer][]) -- Pull request [#64](https://github.com/guard/guard/pull/64): Windows notifications support. ([@stereobooster][]) -- Pull request [#63](https://github.com/guard/guard/pull/63): Refactor listeners to work as a library. ([@niklas][]) +- [#67](https://github.com/guard/guard/pull/67): Allow Guardfile in `$HOME` folder. ([@hashrocketeer][]) +- [#64](https://github.com/guard/guard/pull/64): Windows notifications support. ([@stereobooster][]) +- [#63](https://github.com/guard/guard/pull/63): Refactor listeners to work as a library. ([@niklas][]) - Use `ENV["GUARD_NOTIFY"]` to disable notifications. ([@thibaudgg][]) - Cleaning up all specs. ([@netzpirat][]) -- Pull request [#60](https://github.com/guard/guard/pull/60): Added Windows support. ([@stereobooster][]) -- Pull request [#58](https://github.com/guard/guard/pull/58): Extract code from signal handlers into methods. ([@nicksieger][]) -- Pull request [#55](https://github.com/guard/guard/pull/55): It is now possible to pass `:guardfile` (a Guardfile path) or `:guardfile_contents` (the content of a Guardfile) to `Guard::Dsl.evaluate_guardfile`. Hence this allows the use of `Guard::Dsl.evaluate_guardfile` in a programmatic manner. ([@anithri][], improved by [@rymai][]) - +- [#60](https://github.com/guard/guard/pull/60): Added Windows support. ([@stereobooster][]) +- [#58](https://github.com/guard/guard/pull/58): Extract code from signal handlers into methods. ([@nicksieger][]) +- [#55](https://github.com/guard/guard/pull/55): It is now possible to pass `:guardfile` (a Guardfile path) or `:guardfile_contents` (the content of a Guardfile) to `Guard::Dsl.evaluate_guardfile`. Hence this allows the use of `Guard::Dsl.evaluate_guardfile` in a programmatic manner. ([@anithri][], improved by [@rymai][]) ## 0.3.4 - April 24, 2011 -### Bugs fixes: +### Bug fix -- Issue [#41](https://github.com/guard/guard/issues/41): Removed useless Bundler requirement. ([@thibaudgg][]) +- [#41](https://github.com/guard/guard/issues/41): Removed useless Bundler requirement. ([@thibaudgg][]) -### New features: +### New features - Changed CHANGELOG from RDOC to Markdown and cleaned it! Let's celebrate! ([@rymai][]) - Changed README from RDOC to Markdown! Let's celebrate! ([@thibaudgg][]) -- Issue [#48](https://github.com/guard/guard/issues/48): Adding support for inline Guard classes rather than requiring a gem. ([@jrsacks][]) - +- [#48](https://github.com/guard/guard/issues/48): Adding support for inline Guard classes rather than requiring a gem. ([@jrsacks][]) ## 0.3.3 - April 18, 2011 -### Bugs fixes: +### Bug fix - Fixed `new_modified_files` rerun conditions on `Guard.run_on_change_for_all_guards`. ([@thibaudgg][]) - ## 0.3.2 - April 17, 2011 -### Bugs fixes: - -- Pull request [#43](https://github.com/guard/guard/pull/43): Fixed `guard init` command. ([@brainopia][]) +### Bug fixe +- [#43](https://github.com/guard/guard/pull/43): Fixed `guard init` command. ([@brainopia][]) ## 0.3.1 - April 14, 2011 -### Bugs fixes: +### Bug fixes - Return unique filenames from Linux listener. (Marian Schubert) - `Guard.get_guard_class` return wrong class when loaded nested class. ([@koshigoe][]) -- Issue [#35](https://github.com/guard/guard/issues/35): Fixed open-gem/gem_open dependency problem by using `gem which` to locate guards gem path. (reported by [@thierryhenrio][], fixed by [@thibaudgg][]) -- Issue [#38](https://github.com/guard/guard/issues/38) & Pull request [#39](https://github.com/guard/guard/issues/39): Fixed an invalid ANSI escape code in `Guard::UI.reset_line`. ([@gix][]) +- [#35](https://github.com/guard/guard/issues/35): Fixed open-gem/gem_open dependency problem by using `gem which` to locate guards gem path. (reported by [@thierryhenrio][], fixed by [@thibaudgg][]) +- [#38](https://github.com/guard/guard/issues/38) & Pull request [#39](https://github.com/guard/guard/issues/39): Fixed an invalid ANSI escape code in `Guard::UI.reset_line`. ([@gix][]) -### New features: - -- Issue [#28](https://github.com/guard/guard/issues/28): New `-n` command line option to disable notifications (Growl / Libnotify). ([@thibaudgg][]) +### New feature +- [#28](https://github.com/guard/guard/issues/28): New `-n` command line option to disable notifications (Growl / Libnotify). ([@thibaudgg][]) ## 0.3.0 - January 19, 2011 -### Bugs fixes: +### Bug fix - Avoid launching `run_on_change` guards method when no files matched. `--clear` guard argument is now usable. ([@thibaudgg][]) -### New features: +### New features - The whole directory is now watched during `run_on_change` to detect new files modifications. ([@thibaudgg][]) -- Pull request [#26](https://github.com/guard/guard/pull/26): New DSL method: `group` allows you to group several guards. New CLI option: `--group group_name` to specify certain groups of guards to start. ([@netzpirat][]) +- [#26](https://github.com/guard/guard/pull/26): New DSL method: `group` allows you to group several guards. New CLI option: `--group group_name` to specify certain groups of guards to start. ([@netzpirat][]) - `watch` patterns are now more strict: strings are matched with `String#==`, `Regexp` are matched with `Regexp#match`. ([@rymai][]) - A deprecation warning is displayed if your `Guardfile` contains `String` that look like `Regexp` (bad!). ([@rymai][]) - It's now possible to return an `Enumerable` in the `watch` optional blocks in the `Guardfile`. ([@rymai][]) -### New specs: +### New specs - `Guard::Watcher`. ([@rymai][]) -- Pull request [#13](https://github.com/guard/guard/pull/13): `Guard::Dsl`. ([@oliamb][]) - +- [#13](https://github.com/guard/guard/pull/13): `Guard::Dsl`. ([@oliamb][]) ## 0.2.2 - October 25, 2010 -### Bugs fixes: - -- Issue [#5](https://github.com/guard/guard/issues/5): avoid creating new copy of `fsevent_watch` every time a file is changed. (reported by [@stouset][], fixed by [@thibaudgg][]) +### Bug fix +- [#5](https://github.com/guard/guard/issues/5): avoid creating new copy of `fsevent_watch` every time a file is changed. (reported by [@stouset][], fixed by [@thibaudgg][]) ## 0.2.1 - October 24, 2010 -### Bugs fixes: - -- Pull request [#7](https://github.com/guard/guard/pull/7): Fixes for Linux support. ([@yannlugrin][]) -- Pull request [#6](https://github.com/guard/guard/pull/6): Locate guard now chomp newline in result path. ([@yannlugrin][]) +### Bug fixes +- [#7](https://github.com/guard/guard/pull/7): Fixes for Linux support. ([@yannlugrin][]) +- [#6](https://github.com/guard/guard/pull/6): Locate guard now chomp newline in result path. ([@yannlugrin][]) ## 0.2.0 - October 21, 2010 -### Bugs fixes: +### Bug fixes -- Issue [#3](https://github.com/guard/guard/issues/3): `guard init ` no more need `Gemfile` but `open_gem` is required now. (reported by [@wereHamster][], fixed by [@thibaudgg][]) -- Issue [#2](https://github.com/guard/guard/issues/2): 1.8.6 compatibility. (reported by [@veged][], fixed by [@thibaudgg][]) +- [#3](https://github.com/guard/guard/issues/3): `guard init ` no more need `Gemfile` but `open_gem` is required now. (reported by [@wereHamster][], fixed by [@thibaudgg][]) +- [#2](https://github.com/guard/guard/issues/2): 1.8.6 compatibility. (reported by [@veged][], fixed by [@thibaudgg][]) - Removes Growl & Libnotify dependencies. ([@thibaudgg][]) - ## 0.2.0.beta.1 - October 17, 2010 -### New features: +### New features - Improved listeners support (`rb-fsevent` & `rb-inotify`). ([@thibaudgg][]) - Added polling listening fallback. ([@thibaudgg][]) @@ -299,6 +296,7 @@ [@Gazer]: https://github.com/Gazer [@gix]: https://github.com/gix [@hron]: https://github.com/hron +[@hardipe]: https://github.com/hardipe [@hashrocketeer]: https://github.com/hashrocketeer [@ianwhite]: https://github.com/ianwhite [@indirect]: https://github.com/indirect