aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2020-05-07Match applied patches using message-idKonstantin Ryabitsev
Track message-id for each patch and try to apply to the Link: or Message-Id: trailers, if we find them. Suggested-by: Jason Gunthorpe <jgg@ziepe.ca> Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-05-07Improve remote/branch mappingKonstantin Ryabitsev
Our mapping of local to remote branches was very naive and failed when remote names didn't exactly match heads. Improve it using suggestions from Will Deacon. Link: https://linux.kernel.org/g/tools/message/140 Reported-by: Will Deacon <will@kernel.org> Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-05-07Switch ty -s and -d to allow friendly rangesKonstantin Ryabitsev
Instead of insisting that people put in specific numbers, allow them to specify ranges, such as: b4 ty -s 1-3,5,7- Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-05-07Do not crash when thread is incompleteKonstantin Ryabitsev
Do not try to calculate indexes on a missing patch in an incomplete thread. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-05-07Remove QP encoding when getting fromnameKonstantin Ryabitsev
Make sure we get the clean header value when we store fromname. Link: https://linux.kernel.org/g/tools/message/142 Reported-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-05-01Check if mbox applies to current treeKonstantin Ryabitsev
Check if all patches in the mbox would apply cleanly to the current tree: - find index hash..hash information in each patch - check if git-hash-object shows exact same hashes for the current tree - if not, try the last 10 tags to see if any of them would be a good base-commit for the patch/series Not sure how useful the latter part it, but it hopefully shouldn't slow down regular operations, so I'm going to leave it in for now. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-27Parse body parts into usual chunksKonstantin Ryabitsev
Do a better job parsing a patch message into usual body parts: - git headers (From:, Subject:, Date:) - commit message - trailers - basement (under the ---\n) - signature (under the --\s\n) This allows us to create better reply quotes. Reported-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-24Set version to 0.5.0-devKonstantin Ryabitsev
Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-24Add example files to manifestv0.4.0Konstantin Ryabitsev
We want to make those available to pip installs. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-24Prepare for 0.4.0 releaseKonstantin Ryabitsev
It's time to graduate to 0.4.0 with these features. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-24Use "local tree" instead of "undefined"Konstantin Ryabitsev
This is our fail-through treename, so if we weren't able to figure out anything about it, then call it a "local tree" instead of "undefined". Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-22Properly deal with merge to non-current branchKonstantin Ryabitsev
When running rev-list, be mindful of which branch we need to operate on, otherwise it always runs on the current branch. Reported-by: Mark Brown <broonie@kernel.org> Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-20Use the cover for backfills when availableKonstantin Ryabitsev
When we have a cover letter, use that for backfill purposes, instead of finding the first non-None patch. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-20Support file delete patches and binary patchesKonstantin Ryabitsev
Git's file delete patches don't contain hunks, so we weren't properly processing them for attestation (and for b4 am). While fixing that, I also added attestation support for binary patches. Reported-by: Geert Uytterhoeven <geert@linux-m68k.org> Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-17Expand templates with ${branch} and ${treename}Konstantin Ryabitsev
You can use ${branch} and ${treename} (if you set b4.thanks-treename). See .example files on some hints on how to use them. Suggested-by: Mark Brown <broonie@kernel.org> Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-15Changes to b4 ty based on developer feedbackKonstantin Ryabitsev
- Properly expand ~ and env vars like $HOME in template paths - Allow partial matching of series (with a warning) - Allow using remote branches with -b - Always fall back to subject matching for patches - Tweak to the summary output Suggested-by: Mark Brown <broonie@kernel.org> Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-15Properly deal with diffs that delete all linesKonstantin Ryabitsev
We weren't properly handling special diffs that deleted entire file contents (e.g. by deleting a file). Reported-by: Mark Brown <broonie@kernel.org> Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-15Don't break on @@ -N,N +N @@ diff linesKonstantin Ryabitsev
When a commit is a new file with only one line, the diff output is different, so handle it without breaking. Reported-by: Mark Brown <broonie@kernel.org> Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-15Keep track of how many messages we createKonstantin Ryabitsev
Don't tell us to run git send-email when there's nothing to send. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-15Get info from gecos if we don't have user.nameKonstantin Ryabitsev
Git gets user.name from gecos if it's not specified in user.name, so let's do the same thing. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-15Be more useful during non-auto matchingKonstantin Ryabitsev
Instead of bailing out when we can't find a match for a series, skip it and move to the next one in the queue. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-15Switch to using patchwork-compatible hashesKonstantin Ryabitsev
Using strict attestation hashes for auto-thankinator is problematic, because "git am" uses a certain degree of fuzzing, so when we try to find applied patches by running "git diff" on actual commits, line counts may not be bit-for-bit identical. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-10Document b4 ty and add template examplesKonstantin Ryabitsev
Still a bit slim on documentation, but this is better than nothing. I need to write a better README file that will introduce maintainers to most useful functionality aspects of b4. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-10Use ~/.signature if it exists for tpt defaultsKonstantin Ryabitsev
If we find a ~/.signature, then use it for making a default ${signature} value, otherwise make a "Name <email>" boring one. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-10Add summaries to default templatesKonstantin Ryabitsev
They are much more useful if b4.thanks-commit-url-mask is set, but even without them this will list all subjects and corresponding commit IDs. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-10Don't use git patch-id for patch trackingKonstantin Ryabitsev
Looks like some of the patches sent from quilt (at least from Andrew Morton) are not properly parsed by git patch-id, so use our own patch hashing routines, even if this means we're likely going to miss some of the patches that were edited by maintainers. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-09Add b4 ty that aims to simplify common feedbackKonstantin Ryabitsev
New experimental feature that aims to simplify a very common "thanks, applied" kind of feedback often expected of maintainers. Still needs documentation to explain its usage. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-08Add pr subcommand to the manpageKonstantin Ryabitsev
Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-07Use trailers from old revisions if no changesKonstantin Ryabitsev
If we have multiple versions of patch series in the same thread and someone adds a follow-up trailer to a patch in v1, but doesn't do it for the same *exact* patch in v2, then we carry over that trailer from v1 to v2. We use attestation hashes for this purpose, so all patch/metadata must be exact in order for the trailer to be reused. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-07Better deal with urlescaped msgidsKonstantin Ryabitsev
Message-IDs that are using escaped characters are breaking our lookup due to the refactoring that was necessary for backfilling. This should help deal with such cases. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-06Backfill missing threads from other lore listsKonstantin Ryabitsev
When we query by message-id, sometimes the list that is returned is not the best one to use, because it is lossy. Look at other addresses in the to/cc fields, and if we find another list address that is also backed up on lore.kernel.org, then attempt to backfill missing messages from those lists, until the entire series is complete. This should become obsolete in the future once public-inbox gains ability to return a thread sourced from multiple lists/feeds, but this should be a useful stop-gap measure to help developers in the meantime. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-03Recognize when reroll info is only in 1st patchKonstantin Ryabitsev
Sometimes this happens: [PATCH v2 1/N] [PATCH 2/N] [PATCH 3/N] [PATCH 4/N] Properly recognize such cases and version all patches threaded under the first one as v2. Reported-by: Amit Kucheria <amit.kucheria@gmail.com> Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-04-03Auto-discover base commit when none providedKonstantin Ryabitsev
When a pull request is generated using git-request-pull, the base commit is specified in the body of the message. However, in other cases this information can be missing, so we can use git merge-base to find out what it is after we've performed a "git fetch". Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-03-30Clean up stray debug dataKonstantin Ryabitsev
Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-03-30Escape From lines in git-format-patch outputKonstantin Ryabitsev
We need a valid mboxo format for python, so make sure to escape all From lines not actually starting a new message, per mboxo requirements. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-03-30Decode headers into utf-8 from QPKonstantin Ryabitsev
Since we aren't planning on sending any of this as actual emails, convert EVERYTHING into utf-8 before writing messages, including QP-escaped 7-bit headers. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-03-30Add attestation checks for b4 prKonstantin Ryabitsev
We now use similar subroutines for checking signatures on FETCH_HEAD as we do for patch attestation, making it a convenient operation during the fetch stage: $ b4 pr 202003292114.2252CAEF7@keescook Looking up https://lore.kernel.org/r/202003292114.2252CAEF7@keescook Grabbing thread from lore.kernel.org Looking at: [GIT PULL] seccomp updates for v5.7-rc1 Fetching https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git tags/seccomp-v5.7-rc1 --- [✓] Attestation-by: Kees Cook <keescook@chromium.org> (pgp: 8972F4DFDC6DC026) --- Successfully fetched into FETCH_HEAD Hopefully, I didn't introduce too many bugs into patch attestation, since I had to rewrite the backend a bit to work for both native git operations and patch attestation calls. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-03-30Add current rev to version when running from gitKonstantin Ryabitsev
For ease of tracking version information for folks running things straight out of the checkout, add current git revision to the version info string. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-03-30PR: fix when gitdir is specified via -gKonstantin Ryabitsev
Fix some leftover bugs from prototyping stage when we were always assuming to run from a checkout. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-03-30Only add From: in the body if differentKonstantin Ryabitsev
No need to add an extra From: into the body of the message if it's identical to the From in the original pull request. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-03-27Cleanups and better handling of utf-8 contentKonstantin Ryabitsev
Fix a few most glaring problems performing explode on a message that was not formatted using git-request-pull. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-03-27We do want to use a list when sorting trailersKonstantin Ryabitsev
Switching to using sets for all trailer management resulted in trailer order being non-deterministic for trailers with the same title. Switch back to using lists where it makes a difference. Reported-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-03-27Document --no-cache and --sloppy-trailers flagsKonstantin Ryabitsev
Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-03-27Make cache locations project-specificKonstantin Ryabitsev
When we use a specific project either via -p or via parsing the full lore URL, don't use the generic lookup cache location. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-03-26Add initial "b4 pr" command setKonstantin Ryabitsev
While working on "pull-request exploder" stuff for achiving on lore.kernel.org, I realized that this may be a useful set of features for developers as well, so here is a very simple framework for handing pull requests. Examples: b4 pr <msgid> - downloads that message - parses the pull request - checks that the remote tip is where the message says it should be - makes sure the base-commit is present in the tree - makes sure the tip commit isn't already in one of the branches - checks if FETCH_HEAD already is at that commit - if the above two checks pass, performs a git fetch b4 pr --check <msgid> Runs all of the checks above, but doesn't perform the actual fetch. Useful if you don't remember if you've already processed a pull request or not. b4 pr --explode <msgid> Runs basic sanity checks and then: - performs a git fetch - runs a "git format-patch" for base-commit..FETCH_HEAD - adds the same to/from/cc headers as in the pull request - properly threads each patch below the pull request - saves that into a <msgid>.mbox file The above is handy if you want to comment on something in a pull request and not have to hunt around for sender/cc information. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-03-25Ignore messages without plaintext contentKonstantin Ryabitsev
When a message contains no text/plain contents, then it's not anything we can use and we should toss them out early. Reported-by: Jason Donenfeld <Jason@zx2c4.com> Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-03-24Warn when we are ignoring trailersKonstantin Ryabitsev
Provide a warning when we are ignoring trailers due to from/name mismatch between the headers and the body. Also provides a -S,--sloppy-trailers option to ignore all mismatches. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-03-24Strip leading id:/rfc822msgid:Konstantin Ryabitsev
When piped from other tools, the msgid may be prepended by extraneous info, so strip it to grab the actual msgid. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-03-24b4: allow b4.sh to be symlinked toGreg Kroah-Hartman
Change b4.sh to handle being symlinked to in order to find out where it "lives". This allows me to have a symlink in my local ~/bin/ called b4 that links to the git repo's b4.sh and have everything work properly. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
2020-03-24Up the version to 0.4.0-devKonstantin Ryabitsev
Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>