Blocked is an Elixir-library that helps you to keep track of when hotfixes can be removed by showing compile-time warnings when issues (in your project repository or any other source-code GitHub repository) are closed.
Blocked was made to improve the quality of your project’s code over time: It automates away the human task of checking whether certain hot-fixes, ‘temporary patches’ or ‘duct-tape code’ are still required.
This makes it less scary to add a temporary workaround to your codebase, because you’ll know the minute it is no longer necessary!
- Runs at compile-time as a macro.
- Prints a compile-time warning any time an issue is closed that a piece of your code was waiting for.
- Works for your own project issues as well as for issues of any other GitHub-hosted repository.
- Allows specifying both ‘hotfix’ and optionally a ‘desired’ code block, to make it clear to future readers of your code what can be changed once the related issue is closed.
- Configurable to work on private repositories as well.
- By default performs only checking in Continuous Integration, to keep local compilation fast.
Simple usage example
defmodule Example do require Blocked def main do IO.puts("Hello, world!") Blocked.by("#42", "This code can be removed when the issue is closed") do hacky_workaround() end # The reason is optional Blocked.by("#69") do a_quick_fix() end # It is possible to indicate # the desired 'ideal' code as well, by passing an `else` block: Blocked.by("#1337") do ugly_fallback() else beautiful_progress() end # If the blockage is more general, you can also leave out the `do` block. Blocked.by("#65535", "This whole module can be rewritten once we're on the new Elixir version!") # Blocked supports many ways of referring to an issue Blocked.by("#13") Blocked.by("elixir#13") Blocked.by("elixir/13") Blocked.by("elixir-lang/elixir#13") Blocked.by("elixir-lang/elixir/13") Blocked.by("https://github.com/elixir-lang/elixir/issues/13") end end
Supported Issue Reference patterns
#123: issue number. Assumes that the isue is part of the current repository.
reponame#123: repository + issue number. Assumes that the repository is part of the same owner/organization as the current repository.
owner/reponame#123: owner/organization name + repository + issue number.
https://github.com/owner/reponame/issues/123: Full-blown URL to the page of the issue.
Automatic Repository Detection
We use the
git remote get-url command to check for the remote URL of the current repository and attempt to extract the owner/organization and repository name from that.
We check against the
upstream remote (useful in a forked project), and the
If your setup is different, you can configure the repository and owner name by specifying custom settings in the