aboutsummaryrefslogtreecommitdiffstats
path: root/src/bin/git-sugpatch.rs
AgeCommit message (Collapse)Author
2020-08-23Rename `git-sugpatch` to `git-sugdiff`Teddy Wing
The word "patch" reminds me more of the `patch` Unix command, which is what `git-sugapply` does. Since this command outputs diffs, it makes more sense to call it `sugdiff`. That also brings these closer to the native Git commands, `git-diff` and `git-apply`. I had chosen "patch" originally because the command generated a unified diff that could be used as a patch file to apply to the repo.
2020-08-04Add license (GNU GPLv3+)Teddy Wing
2020-08-02Move suggestion arguments check to `Config::get`Teddy Wing
Since this check for suggestion arguments is in both binaries, we can move it to the common preflight function. Clean up other areas now that we moved the function.
2020-08-02Add `-h` argumentTeddy Wing
Print usage on `-h` and `--help`. Store the usage brief on `Config` in order to be able to print it from multiple places.
2020-08-02git-sugpatch: Print usage with no suggestion argumenetTeddy Wing
Add `Options` to `Config` to allow us to get a usage string from a `Config` instance, which is where we create `Options`. Needed to remove the `Debug` derive on `Config` in order to add the field as `Options` doesn't implement `Debug`.
2020-08-02git-sugpatch: Exit with `EX_USAGE` if no suggestion argumentsTeddy Wing
Replace my test exit code with a real one.
2020-08-02git-sugpatch: Replace `unwrap` with printed error message and exitTeddy Wing
2020-08-02git-sugpatch: Move the suggestion arguments loop to a new functionTeddy Wing
Split this out into a separate function because I want to reuse it in `git-sugapply`.
2020-08-02git-sugpatch: Fix `SuggestionUrl` parsingTeddy Wing
Forgot to change this line when I set up the loop over suggestion arguments. We want to parse the current argument instead of hard-coding the first one.
2020-08-02git-sugpatch: Clean up after 38a871f28bad90e238021d8cc46b9fa926f9df75Teddy Wing
Remove unused code.
2020-08-02git-sugpatch: Error if no remote and suggestion ID argumentTeddy Wing
We want to allow not having a remote when URL arguments are given, but require it when a suggestion ID argument is given (otherwise we wouldn't have an owner-repo pair to make the GitHub request). Had some trouble with the `OwnerRepo.o_r` value. It was being moved into the closure, so tried a loop. There was a similar problem with the loop. However, by returning, I was able to get a reference to the `Result` instead of having it be moved.
2020-08-02git-sugpatch: Print error and exit on `Config::get` errorTeddy Wing
Add `exitcode` to exit with an appropriate code. Add the `gseprintln` macro to wrap `eprintln!()`, prefixing the output with "error: ".
2020-08-02git-sugpatch: Accept multiple suggestion args; Accept suggestion ID argsTeddy Wing
Add the ability to pass multiple suggestions to the binary. The diffs will appear in the output one after another. Also allow suggestions to be specified by their comment ID instead of their full URL. This uses the Git repo's remote to determine the owner-repo pair. When a URL argument is given, the owner-repo pair is extracted from the URL. It's now possible to call the binary like this: $ git-sugpatch 459692838 \ > https://github.com/teddywing/suggestion-test/pull/1#discussion_r459691747
2020-08-01Get configTeddy Wing
We need the following values in order to build a `Client`: * GitHub token * Repo owner * Repo name Get the token from a command-line argument, or else the Git config, or else an environment variable. Get the repo identifiers from the repo's remote URL. Use the remote specified as a command-line argument, otherwise get it from the Git config, or else default to "origin". TODO: Only try to get the owner-name pair from the remote if a comment ID was given, not if a URL argument was passed.
2020-07-29Rename crate to 'github-suggestion'Teddy Wing
Didn't like the old name. Wanted to make the GitHub reference more explicit. I remember it as "suggestion", since that's the name of the GitHub feature, so "suggested" was confusing. The final "patch" seemed redundant or unnecessary.
2020-07-29Suggestion: Remove `unwrap`s and return `Result`s from diff methodsTeddy Wing
Extend the `Error` enum with new variants to capture the possible errors from `diff()` and `diff_with_repo()`.
2020-07-28Client::new(): Return a `Result`Teddy Wing
Wrap `Github` client errors.
2020-07-26Suggestion: Add `diff` methodTeddy Wing
Create a patch file for the suggestion. Instead of building the patch text manually, as in my earlier attempts (`patch` and `unified_diff`), apply the patch to the file in memory, and then ask libgit2 to give us a Git patch by comparing the original blob and the patched buffer. Doing this because I was unsuccessful in manually composing a patch file that Git would accept. I could create unified diffs that the `patch` program would accept, but these wouldn't work with `git-apply`. My current guess is that these didn't work because I didn't have both before and after context in my manually-created patch files. Since this tool is intended to be used with Git, I want a patch file that will work transparently with Git utilities. The easiest alternative to manually generating the patch file seemed to be to have Git create the patch text. Add a new binary, `git-sugpatch`, that outputs the patch text to standard output. TODO: This gets the original from the current HEAD in `apply_to()`. We should instead be using the contents of `blob`, because the original is not necessarily the working copy.