Mercurial > hg
view tests/test-rebase-dest.t @ 32197:7bcc9a5ab96e
strip: make tree stripping O(changes) instead of O(repo)
The old tree stripping logic iterated over every tree revlog in the repo looking
for commits that had revs to be stripped. That's very inefficient in large
repos. Instead, let's look at what files are touched by the strip and only
inspect those revlogs.
I don't have actual perf numbers, since internally we don't use a true
treemanifest, but simply iterating over hundreds of thousands of revlogs takes
many, many seconds, so this should help tremendously when stripping only a few
commits.
author | Durham Goode <durham@fb.com> |
---|---|
date | Mon, 08 May 2017 11:35:23 -0700 |
parents | ae6bab095c66 |
children | 3b7cb3d17137 |
line wrap: on
line source
Require a destination $ cat >> $HGRCPATH <<EOF > [extensions] > rebase = > [commands] > rebase.requiredest = True > EOF $ hg init repo $ cd repo $ echo a >> a $ hg commit -qAm aa $ echo b >> b $ hg commit -qAm bb $ hg up ".^" 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ echo c >> c $ hg commit -qAm cc $ hg rebase abort: you must specify a destination (use: hg rebase -d REV) [255] $ hg rebase -d 1 rebasing 2:5db65b93a12b "cc" (tip) saved backup bundle to $TESTTMP/repo/.hg/strip-backup/5db65b93a12b-4fb789ec-backup.hg (glob) $ hg rebase -d 0 -r . -q $ HGPLAIN=1 hg rebase rebasing 2:889b0bc6a730 "cc" (tip) saved backup bundle to $TESTTMP/repo/.hg/strip-backup/889b0bc6a730-41ec4f81-backup.hg (glob) $ hg rebase -d 0 -r . -q $ hg --config commands.rebase.requiredest=False rebase rebasing 2:279de9495438 "cc" (tip) saved backup bundle to $TESTTMP/repo/.hg/strip-backup/279de9495438-ab0a5128-backup.hg (glob) Requiring dest should not break continue or other rebase options $ hg up 1 -q $ echo d >> c $ hg commit -qAm dc $ hg log -G -T '{rev} {desc}' @ 3 dc | | o 2 cc |/ o 1 bb | o 0 aa $ hg rebase -d 2 rebasing 3:0537f6b50def "dc" (tip) merging c warning: conflicts while merging c! (edit, then use 'hg resolve --mark') unresolved conflicts (see hg resolve, then hg rebase --continue) [1] $ echo d > c $ hg resolve --mark --all (no more unresolved files) continue: hg rebase --continue $ hg rebase --continue rebasing 3:0537f6b50def "dc" (tip) saved backup bundle to $TESTTMP/repo/.hg/strip-backup/0537f6b50def-be4c7386-backup.hg (glob) $ cd .. Check rebase.requiredest interaction with pull --rebase $ hg clone repo clone updating to branch default 3 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd repo $ echo e > e $ hg commit -qAm ee $ cd .. $ cd clone $ echo f > f $ hg commit -qAm ff $ hg pull --rebase abort: rebase destination required by configuration (use hg pull followed by hg rebase -d DEST) [255]