summaryrefslogtreecommitdiff
path: root/git-debrebase
Commit message (Collapse)AuthorAge
...
* git-debrebase: Rename $want_tree_ to $want_Ian Jackson2018-08-19
| | | | | | NFC Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: Prep for avoid read-tree in walk when not rewritingIan Jackson2018-08-19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Because the git index is a flat list of files, not a directory hierarchy, git-read-tree can be very slow. We want to avoid it if possible. Introduce a new way of working, where we defer calls to read-tree. In detail: * $read_tree_upstream and $read_tree_debian, which are the only ways that walk invokes read-tree, simply record their argument; * The actual read-tree is done just before the write-tree and commit generation. read_tree_upstream, conveniently, does both halves, if it gets both arguments. * Put all of the read-tree and commit regeneration in a branch triggered if we are rewriting or "trying to be careful". Right now we are always careful, but I have tested this with a hack setting $opt_careful to 0, and the performance on the example branch in #905995 is much improved: 3.4s rather than 77s for `git-debrebase'. This is not suitable for enabling in its current form. I want to actuallly abolish the $opt_careful, and, instead, check with get_differs or git-cat-file that the tree segments, and the parent lists, are identical. When we do that we won't be checking any more that the commit generation can generate identical commits when not rewriting. But it doesn't really matter much any more provided the commits are well-formed and right, and the test suite will check that. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: walk: Introduce $read_tree_debianIan Jackson2018-08-12
| | | | | | We are going to make these do something more efficient, sometimes. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: walk: Move $read_tree_upstream into the loopIan Jackson2018-08-12
| | | | | | NFC. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: Drop a redundant call to $read_tree_upstreamIan Jackson2018-08-12
| | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: conflict: Some xxx's now doneIan Jackson2018-08-12
| | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Actually use merge resolutionsIan Jackson2018-08-12
| | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Actually record merge resolutionsIan Jackson2018-08-12
| | | | | | | | And, destroy it on scrap. Nothing consumes this yet. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: scrap works properly when it does only rebase --abortIan Jackson2018-08-12
| | | | | | | We use @deferred_updates to see if we actually did anything for --noop-ok purposes. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Change wreckage to refs/debrebase/wreckage/*Ian Jackson2018-08-12
| | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: New record-resolved-merge subcommand, WIPIan Jackson2018-08-12
| | | | | | | Right now this seems to be able to generate some commit, but it doesn't know how to record it. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Split off merge_series_patchqueue_convertIan Jackson2018-08-11
| | | | | | | | We're about to reuse this. NFC. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Record the new-base in the wreckage.Ian Jackson2018-08-11
| | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Use a fresh branch and check out againIan Jackson2018-08-11
| | | | | | | | We are going to want this in a moment. No overall functional change. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Introduce $merged_pqIan Jackson2018-08-11
| | | | | | | | We are going to want this in a moment. NFC. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Use a couple of globals insteadIan Jackson2018-08-11
| | | | | | | | | We are going to make some of this into its own sub, and copying the convenience functions seems annoying, so do this. NFC. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Introduce merge_attempt_cmd globalIan Jackson2018-08-11
| | | | | | NFC Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Do wreckage cleaning separatelyIan Jackson2018-08-11
| | | | | | | git-update-ref hates us if we delete a ref and reintroduce it, in the same transaction. In this case we don't mind doing it in two goes. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: fresh_workarea: Support $subdirIan Jackson2018-08-11
| | | | | | | | And use this in merge_series. NFC. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Prettify subprocess failuresIan Jackson2018-08-11
| | | | | | | If we print STDERR in advance, there is a newline beforehand, which is undesirable. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Minor style and error message changeIan Jackson2018-08-11
| | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Call merge_failed in merge_seriesIan Jackson2018-08-11
| | | | | | Introduce $attempt_cmd for this purpose. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Defeat evals which might try to trap merge_failedIan Jackson2018-08-11
| | | | | | | | That would be dangerous because we're in the wrong directory and other things may be wrong. For example, if we continue we might overwrite wreckage with other wreckage. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Save wreckage in $maindirIan Jackson2018-08-11
| | | | | | We should change to $maindir before exiting. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Always save wreckageIan Jackson2018-08-11
| | | | | | There is no point configuring this. We tidy it up again soon enough. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Wreckage: tidy it up on successful commandsIan Jackson2018-08-11
| | | | | | | Whenever we do a final ref update, discard any wreckage. The wreckage can be autoregenerated, so it is not very important. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Break out merge_wreckage_cleaning (nfc)Ian Jackson2018-08-11
| | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Save wreckage if desiredIan Jackson2018-08-11
| | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Introduce new merge_failed subIan Jackson2018-08-11
| | | | | | | And call it from $nomerge in walk. Now we produce a sane error message. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Make mwrecknote call printdebugIan Jackson2018-08-11
| | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Miscellaneous mwrecknote fixesIan Jackson2018-08-11
| | | | | | | | | | | Add the missing commitish for the -patchqueue wrecknote. Defend against undef (or too few) args to mwrecknote. (The way we end up calling it means perl doesn't notice.) In walk, ensure that we initialise $cl->{MergeWreckNotes}. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: Break out run_ref_updates_nowIan Jackson2018-08-11
| | | | | | NFC Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Introduce global mwrecknote subIan Jackson2018-08-11
| | | | | | NFC Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Do not crash on branches with no delta queueIan Jackson2018-08-11
| | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: Do not bail making patches if there aren't any.Ian Jackson2018-08-11
| | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Add wreck note recording to merge_seriesIan Jackson2018-08-11
| | | | | | | We also add a LeftRight to the merge base delta queue hashref, so that it can be treated the same as the left and right delta queues. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Clarify an internal commit messageIan Jackson2018-08-11
| | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Break out $mdebugIan Jackson2018-08-11
| | | | | | NFC. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Pass wreckage hashref to merge_seriesIan Jackson2018-08-11
| | | | | | NFC so far. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Introduce $mwrecknote in walk analysis halfIan Jackson2018-08-11
| | | | | | | | | | We collect various git objects that we may want to present to the user as wreckage. Currently we dump them in $cl and print them out in $nomerge. We'll want to do better than that of course. Also, we don't collect any wreckage for the actual series merge yet. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Whitespace changesIan Jackson2018-08-11
| | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Refactor interchange merge-base computationIan Jackson2018-08-11
| | | | | | | We need to unpack this a bit so that we can insert some wrecknote stuff, which will come in a moment. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Fix a $nomerge messageIan Jackson2018-08-11
| | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Add a comment about rewritingIan Jackson2018-08-11
| | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Remove a redundant checkIan Jackson2018-08-11
| | | | | | | MergedBreakwaters commits are now handled by a completely other branch of the if, so this check is now redundant. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: mergedbreakwaters_anchor: Check consistencyIan Jackson2018-08-11
| | | | | | | Check that the result contains all the other anchors. This is ensured by walk, and required of VanillaMerges. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Avoid needlessly walking MergedBreakwatersIan Jackson2018-08-11
| | | | | | | We will not ever need to rewrite one of these, so we can just ask keycommits for its anchor. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Avoid asking user to re-merge debian/Ian Jackson2018-08-11
| | | | | | | If it had conflicts, they will have been resolved earlier and we can just take that resolution. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: merge: Add another xxx commentIan Jackson2018-08-11
| | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* git-debrebase: walk: Reintroduce the local $read_tree_upstream subIan Jackson2018-08-11
| | | | | | | | | | | | | | | Now that we have the $tree_with_debian parameter to the global read_tree_upstream, we can use it to avoid the git-write-tree call and pass $build as the $tree_with_debian. This thus partially reverts dfc092e0ec3d932e51a071000519477d0e33525c git-debrebase: Make read_tree_upstream global (nfc) The combined effect is now that $read_tree_upstream does exactly the git commands it did before. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>