##// END OF EJS Templates
rust-cpython: mark all PyLeaked methods as unsafe...
rust-cpython: mark all PyLeaked methods as unsafe Unfortunately, these methods can be abused to obtain the inner 'static reference. The simplest (pseudo-code) example is: let leaked: PyLeaked<&'static _> = shared.leak_immutable(); let static_ref: &'static _ = &*leaked.try_borrow(py)?; // PyLeakedRef::deref() tries to bound the lifetime to itself, but // the underlying data is a &'static reference, so the returned // reference can be &'static. This problem can be easily fixed by coercing the lifetime, but there are many other ways to achieve that, and there wouldn't be a generic solution: let leaked: PyLeaked<&'static [_]> = shared.leak_immutable(); let leaked_iter: PyLeaked<slice::Iter<'static, _>> = unsafe { leaked.map(|v| v.iter()) }; let static_slice: &'static [_] = leaked_iter.try_borrow(py)?.as_slice(); So basically I failed to design the safe borrowing interface. Maybe we'll instead have to add much more restricted interface on top of the unsafe PyLeaked methods? For instance, Iterator::next() could be implemented if its Item type is not &'a (where 'a may be cheated.) Anyway, this seems not an easy issue, so it's probably better to leave the current interface as unsafe, and get broader comments while upstreaming this feature.

File last commit:

r38804:824636b0 stable
r44689:e960c30d default
Show More
dockerdeb
40 lines | 1.3 KiB | text/plain | TextLexer
Gregory Szorc
packaging: move some docker scripts into contrib/packaging/...
r38024 #!/bin/bash -eu
Gregory Szorc
packaging: move packagelib.sh into contrib/packaging/...
r38025 . $(dirname $0)/packagelib.sh
Gregory Szorc
packaging: move some docker scripts into contrib/packaging/...
r38024
BUILDDIR=$(dirname $0)
export ROOTDIR=$(cd $BUILDDIR/../.. > /dev/null; pwd)
DISTID="$1"
CODENAME="$2"
PLATFORM="$1-$2"
shift; shift # extra params are passed to build process
OUTPUTDIR=${OUTPUTDIR:=$ROOTDIR/packages/$PLATFORM}
Gregory Szorc
packaging: replace dockerlib.sh with a Python script...
r38476 CONTAINER=hg-docker-$PLATFORM
Gregory Szorc
packaging: move some docker scripts into contrib/packaging/...
r38024
Gregory Szorc
packaging: replace dockerlib.sh with a Python script...
r38476 DOCKER=$($BUILDDIR/hg-docker docker-path)
Gregory Szorc
packaging: don't write files for templatized Dockerfiles...
r38477 $BUILDDIR/hg-docker build \
--build-arg CODENAME=$CODENAME \
$BUILDDIR/docker/$DISTID.template \
$CONTAINER
Gregory Szorc
packaging: move some docker scripts into contrib/packaging/...
r38024
# debuild only appears to be able to save built debs etc to .., so we
# have to share the .. of the current directory with the docker
# container and hope it's writable. Whee.
Gregory Szorc
packaging: make packaging scripts less reliant on pwd...
r38033 dn=$(basename $ROOTDIR)
Gregory Szorc
packaging: move some docker scripts into contrib/packaging/...
r38024
Gregory Szorc
packaging: consistently create build user in Dockerfiles...
r38475 DBUILDUSER=build
Gregory Szorc
packaging: move some docker scripts into contrib/packaging/...
r38024 if [ $(uname) = "Darwin" ] ; then
$DOCKER run -u $DBUILDUSER --rm -v $PWD/..:/mnt $CONTAINER \
sh -c "cd /mnt/$dn && make clean && make local"
fi
Gregory Szorc
packaging: make packaging scripts less reliant on pwd...
r38033 $DOCKER run -u $DBUILDUSER --rm -v $ROOTDIR/..:/mnt $CONTAINER \
Gregory Szorc
packaging: move builddeb into contrib/packaging/...
r38026 sh -c "cd /mnt/$dn && DEB_BUILD_OPTIONS='${DEB_BUILD_OPTIONS:=}' contrib/packaging/builddeb --build --distid $DISTID --codename $CODENAME $@"
Gregory Szorc
packaging: always execute builddeb from source root...
r38804 (cd $ROOTDIR && contrib/packaging/builddeb --cleanup --distid $DISTID --codename $CODENAME)
Gregory Szorc
packaging: move some docker scripts into contrib/packaging/...
r38024 if [ $(uname) = "Darwin" ] ; then
$DOCKER run -u $DBUILDUSER --rm -v $PWD/..:/mnt $CONTAINER \
sh -c "cd /mnt/$dn && make clean"
fi