view tests/test-mq-qrefresh @ 11109:a2bc2f2d77a9

subrepo: normalize path part of URLs so that pulling subrepos from webdir works For a "all projects at root" repo layout eg: /main /sub Where subrepos are used such that a clone of main has this layout: ./main/ ./main/.hgsub ./main/sub/ And the .hgsub content is: sub = ../sub This allows a pull from a hgweb where main and sub are exposed at the root (or same directory level) The current code doesn't normalize the path component of a pull url. this results in trying to pull from http://server.com/hg/main/../sub Current hgweb implementation doesn't reduce the path component so this results in a 404 error though everything is setup logically. This patch adresses this 404 error on the puller side normalizing the URLs used for pulling sub repos. For this example, the URL would be reduced to http://server.com/hg/sub Fix + test
author Edouard Gomez <ed.gomez@free.fr>
date Sat, 01 May 2010 23:05:19 +0200
parents 8cb81d75730c
children
line wrap: on
line source

#!/bin/sh

echo "[extensions]" >> $HGRCPATH
echo "mq=" >> $HGRCPATH

catpatch() {
    cat $1 | sed -e "s/^\(# Parent \).*/\1/"
}

echo % init
hg init a
cd a

echo % commit
mkdir 1 2
echo 'base' > 1/base
echo 'base' > 2/base
hg ci -Ambase -d '1 0'

echo % qnew mqbase
hg qnew -mmqbase mqbase

echo % qrefresh
echo 'patched' > 1/base
echo 'patched' > 2/base
hg qrefresh

echo % qdiff
hg qdiff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
               -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % qdiff dirname
hg qdiff . | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
                 -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % patch file contents
catpatch .hg/patches/mqbase | \
sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
    -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % qrefresh 1
echo 'patched again' > base
hg qrefresh 1

echo % qdiff
hg qdiff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
               -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % qdiff dirname
hg qdiff . | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
                 -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % patch file contents
catpatch .hg/patches/mqbase | \
sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
    -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % qrefresh . in subdir
( cd 1 ; hg qrefresh . )

echo % qdiff
hg qdiff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
               -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % qdiff dirname
hg qdiff . | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
                 -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % patch file contents
catpatch .hg/patches/mqbase | \
sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
    -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % qrefresh in hg-root again
hg qrefresh

echo % qdiff
hg qdiff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
               -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % qdiff dirname
hg qdiff . | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
                 -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % patch file contents
catpatch .hg/patches/mqbase | \
sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
    -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo
echo % qrefresh --short tests:
echo 'orphan' > orphanchild
hg add orphanchild

echo % - add 1/base and 2/base one by one
hg qrefresh nonexistingfilename # clear patch
hg qrefresh --short 1/base
hg qrefresh --short 2/base

echo % -- qdiff output
hg qdiff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
               -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % -- patch file content
catpatch .hg/patches/mqbase | \
sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
    -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
hg st

echo % -- diff shows what is not in patch
hg diff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
              -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/" \
              -e "s/^\(diff\).*/\1/"
echo % - before starting exclusive tests
sed -n '/^diff/s/diff -r [^ ]* //p' .hg/patches/mqbase
echo % - exclude 2/base
hg qref -s -X 2/base
sed -n '/^diff/s/diff -r [^ ]* //p' .hg/patches/mqbase
echo % -- status shows 2/base as dirty
hg st
echo % - remove 1/base and add 2/base again but not orphanchild
hg qref -s -X orphanchild -X 1/base 2/base orphanchild
sed -n '/^diff/s/diff -r [^ ]* //p' .hg/patches/mqbase
echo % - add 1/base with include filter - and thus remove 2/base from patch
hg qref -s -I 1/ o* */*
sed -n '/^diff/s/diff -r [^ ]* //p' .hg/patches/mqbase
echo
cd ..

# Test qrefresh --git losing copy metadata
echo % create test repo
hg init repo
cd repo
echo "[diff]" >> .hg/hgrc
echo "git=True" >> .hg/hgrc
echo a > a
hg ci -Am adda
hg copy a ab
echo b >> ab
hg copy a ac
echo c >> ac
echo % capture changes
hg qnew -f p1
hg qdiff
echo % refresh and check changes again
hg qref
hg qdiff
cd ..

# Test issue 1441: qrefresh confused after hg rename
echo % issue1441 without git patches
hg init repo-1441
cd repo-1441
echo a > a
hg add a
hg qnew -f p
hg mv a b
hg qrefresh
hg qdiff --nodates
cd ..

echo '% issue2025: qrefresh does not honor filtering options when tip != qtip'
hg init repo-2025
cd repo-2025
echo a > a
echo b > b
hg ci -qAm addab
echo a >> a
echo b >> b
hg qnew -f patch
hg up -qC 0
echo c > c
hg ci -qAm addc
hg up -qC 1
echo '% refresh with tip != qtip'
hg --config diff.nodates=1 qrefresh -I b 2>&1 \
    | sed 's/saving bundle.*/saving bundle.../g'
echo '% status after refresh'
hg st
echo '% b after refresh'
cat b
echo '% patch file after refresh'
catpatch .hg/patches/patch
cd ..


echo % issue1441 with git patches
hg init repo-1441-git
cd repo-1441-git
echo "[diff]" >> .hg/hgrc
echo "git=True" >> .hg/hgrc
echo a > a
hg add a
hg qnew -f p
hg mv a b
hg qrefresh
hg qdiff --nodates
cd ..