package: aegis
severity: grave
version: 4.24-5
thanks
Aegis fails to checkout old versions with aecp -ind correctly if files have
been moved around in interesting ways. Details are below. The full thread
starts at http://sourceforge.net/mailarchive/message.php?msg_id=26848688
I have marked the bug as found in the lenny version, too. But with the lenny
version, this is only reproducible if the segfault
http://sourceforge.net/tracker/?func=detail&aid=3066593&group_id=224&atid=100224
would be fixed first.
---------- Forwarded message ----------
Date: Mon, 24 Jan 2011 17:33:36 +0100 (CET)
From: Stefan Fritsch <s...@sfritsch.de>
To: Walter Franzini <walter.franz...@gmail.com>
Cc: aegis-develop...@lists.sourceforge.net
Subject: Re: [Aegis-developers] aegis gets confused when renaming files
Hi Walter,
thanks for your help and sorry for the late response.
On Fri, 14 Jan 2011, Walter Franzini wrote:
The aecp -ind bug is fixed, you can get a compressed patch from
http://aegis.stepbuild.org/cgi-bin/aeget/aegis.4.24.C665/?aepatch+compat=4.16
This fixes some aecp -ind problems, but I found other problems that are not
fixed. Again, the attached reprod4 script creates the repository and the
verify4 script shows that aecp -ind produces wrong output.
If I'm not wrong you are a DD, so you can probably give me some advice
about the best/proper way to have these fixes in squeeze. Actually only
RC bugs and translation updates are allowed to migrate to testing, so a
new upload in unstable will be blocked and not eligible for unblocking.
I think the inability of a revision control system to checkout old versions
correctly is a grave bug and is therefore RC. I will open a bug report in the
debian BTS.
The fix will likely be too late for Squeeze 6.0.0, but I am sure it is eligible
for the first point release 6.0.1. To get an update into 6.0.1, you need to
upload a package that fixes this bug but makes no other changes. Then ask
debian-rele...@lists.debian.org for inclusion. If the fix is uploaded before
6.0.0, it can likely be propagated from unstable. If not, a separate upload to
stable-proposed-updates will be necessary. If you need a sponsor for the
upload, just ask.
Cheers,
Stefan
#!/bin/bash
. /usr/share/aegis/profile
set -eux
P=${1:-bug4}
U=$LOGNAME
TF=$(mktemp)
trap "rm -f $TF" EXIT
SNAPSHOTDIR=$(pwd)/snapshots.$P
if [ -e $SNAPSHOTDIR ] ; then
echo "$SNAPSHOTDIR already exists"
exit 1
else
mkdir $SNAPSHOTDIR
fi
setup_devs () {
aegis -new_developer $U || true
aegis -new_integrator $U || true
aegis -new_reviewer $U || true
}
snapshot () {
DIR=$SNAPSHOTDIR/$AEGIS_PROJECT.C$AEGIS_CHANGE
if [ -e $DIR ] ; then
echo snapshot $DIR already exists
exit 1
fi
aecd
cp -rL . $DIR
}
nc () {
EDITOR=true aegis -v -nc -p $AEGIS_PROJECT > $TF 2>&1
cat $TF
export AEGIS_CHANGE=$(grep aegis.*created $TF|perl -p -e 's/.*change
([0-9]+):.*/$1/')
aedb -p $AEGIS_PROJECT $AEGIS_CHANGE
aecd
}
ec () {
aecd
sleep 1
aed
aeb
snapshot
sleep 1
aede
aeib
sleep 1
aecd
aeb
aed
cd
aeipass
}
nbr () {
EDITOR=true aegis -v -nbr -p $AEGIS_PROJECT > $TF 2>&1
cat $TF
BR=$(grep aegis.*created $TF|perl -p -e 's/.*"(\S+)": created.*/$1/')
BR=${BR#$AEGIS_PROJECT.}
export AEGIS_PROJECT=$AEGIS_PROJECT.$BR
setup_devs
}
ebr () {
export AEGIS_PROJECT=${AEGIS_PROJECT%.$BR}
export AEGIS_CHANGE=$BR
aecd
sleep 1
aede
aeib
sleep 1
aecd
aeb
aed
sleep 1
cd
aeipass
}
setup_proj () {
EDITOR=true aenpr $P.1
export AEGIS_PROJECT=$P.1
setup_devs
PA=$(mktemp)
cat > $PA << 'EOF'
description = "The \"$P\" program, branch 1.";
developer_may_review = true;
developer_may_integrate = true;
reviewer_may_integrate = true;
developers_may_create_changes = true;
umask = 022;
default_test_exemption = true;
default_test_regression_exemption = true;
minimum_change_number = 10;
reuse_change_numbers = true;
minimum_branch_number = 1;
skip_unlucky = false;
compress_database = false;
develop_end_action = goto_awaiting_integration;
protect_development_directory = false;
EOF
aepa -file $PA
rm -f $PA
nc
aenf aegis.conf
cat > aegis.conf << 'EOF'
build_command = "true";
development_directory_style = {
source_file_symlink = true;
};
merge_command =
"set +e; \
merge -p -L baseline -L C$c ${quote $mostrecent} ${quote $original} \
${quote $input} > ${quote $output}; \
test $? -le 1";
diff_command =
"diff -pU10 ${quote $original} ${quote $input} >${quote $output} \
|| [ $? -eq 1 ] || grep \"^Binary files\" ${quote $output}";
architecture =
[
{
name = "unspecified";
pattern = "*";
}
];
history_create_command = "fhist ${b $h} -create -cu -i $i -p ${d $h} -r";
history_get_command = "fhist ${b $h} -e '$e' -o $o -p ${d $h}";
history_put_command = "fhist ${b $h} -create -cu -i $i -p ${d $h} -r";
history_query_command = "fhist ${b $h} -l 0 -p ${d $h} -q";
history_content_limitation = international_text;
EOF
ec
}
newf () {
FNAME=$1
aenf $FNAME
echo $FNAME > $FNAME
echo created $AEGIS_PROJECT $AEGIS_CHANGE >> $FNAME
}
modf () {
FNAME=$1
aecp $FNAME
echo modified $AEGIS_PROJECT $AEGIS_CHANGE >> $FNAME
}
mvf () {
FNAME=$1
NEWNAME=$2
aemv $FNAME $NEWNAME
echo mv $FNAME $NEWNAME $AEGIS_PROJECT $AEGIS_CHANGE >> $NEWNAME
}
rmf () {
FNAME=$1
aerm $FNAME
}
setup_proj
nbr
# 1.1
nc
# 1.1.C010
newf dir1/file1
ec
nc
# 1.1.C011
modf dir1/file1
ec
ebr
nbr
# 1.2
nc
# 1.2.C010
modf dir1/file1
newf dir2/file2
ec
ebr
nbr
# 1.3
nc
# 1.3.C010
mvf dir1/file1 dir2/file1
ec
nc
# 1.3.C011
modf dir2/file1
ec
ebr
nbr
# 1.4
nc
# 1.4.C010
newf dir3/file3
ec
ebr
###
# if we stop here, there will already be the first wrong result from aecp -ind
# continuing causes more failures
nbr
# 1.5
nc
# 1.5.C010
modf dir3/file3
ec
nc
# 1.5.C011
mvf dir2/file1 dir3/file1
ec
ebr
nbr
# 1.6
nc
# 1.6.C010
modf dir3/file3
ec
nc
# 1.6.C011
mvf dir2/file2 dir3/file2
ec
ebr
nbr
# 1.7
nc
# 1.7.C010
modf dir3/file2
ec
nc
# 1.7.C011
modf dir3/file2
ec
ebr
nbr
# 1.8
nc
# 1.8.C010
modf dir3/file3
ec
nc
# 1.8.C011
modf dir3/file1
ec
ebr
echo OK
#!/bin/bash
. /usr/share/aegis/profile
set -exu
P=${1:-bug4}
SNAPSHOTDIR=$(pwd)/snapshots.$P
RC=0
ERRORS=""
error () {
echo "ERROR: $@"
IFS='' ERRORS="$ERRORS $@"
RC=1
}
mydiff () {
diff -urN -x \*,D -x aegis.log "$@"
}
for b in 1 2 3 4 5 6 7 8; do
for c in 10 11 12 13; do
[ -d $SNAPSHOTDIR/$P.1.$b.C$c ] || continue
cpdir=$(mktemp -d)
cd $cpdir
aecp -ind -p $P.1.$b -DELta_From_Change $c . ||
error "aecp -ind failed for $P.1.$b.C0$c"
mydiff $SNAPSHOTDIR/$P.1.$b.C$c . ||
error "aecp -ind gave wrong result for $P.1.$b.C0$c"
rm -rf $cpdir
done
done
echo $ERRORS
exit $RC