#!/bin/bash
# Wed Mar 31 2010 Pietro Abate <pietro.abate@pps.jussieu.fr>

#set -x 

list=$1
echo $@
parms=( "$@" );
unset parms[0]; 
set -- "${parms[@]}"; 
command=$@

aptroot='/var/tmp/fakeapt'

fakeaptconf() {
    apt-config \
        -o APT::Get::List-Cleanup="false" \
        -o Dir::Cache=$aptroot \
        -o Dir::State=$aptroot \
        -o Dir::State::status=$aptroot/status \
        -o Dir::Etc::SourceList=$aptroot/sources.list \
        -o APT::Install-Recommends="false" \
        -o APT::Architecture="arch1" \
        -o APT::Architectures::="arch2" \
        -o APT::Architectures::="arch3" \
        dump
}

fakeaptcache() {
    parms=( "$@" );
    unset parms[0]; 
    set -- "${parms[@]}"; 
    apt-cache \
        -o Dir::Cache=$aptroot \
        -o Dir::State=$aptroot \
        -o Dir::State::status=$aptroot/status \
        -o Dir::Etc::SourceList=$aptroot/sources.list \
        -o APT::Architecture="arch1" \
        -o APT::Architectures::="arch2" \
        -o APT::Architectures::="arch3" \
        show $@
}

fakeapt() {
    apt-get -y -s \
        -o APT::Get::List-Cleanup="false" \
        -o Dir::Cache=$aptroot \
        -o Dir::State=$aptroot \
        -o Dir::State::status=$aptroot/status \
        -o Dir::Etc::SourceList=$aptroot/sources.list \
        -o APT::Install-Recommends="false" \
        -o APT::Architecture="arch1" \
        -o APT::Architectures::="arch2" \
        -o APT::Architectures::="arch3" \
        $@
}

fakeaptitude() {
    aptitude -y -s \
        -o APT::Get::List-Cleanup="false" \
        -o Dir::Cache=$aptroot \
        -o Dir::State=$aptroot \
        -o Dir::State::status=$aptroot/status \
        -o Dir::Etc::SourceList=$aptroot/sources.list \
        -o APT::Architecture="arch1" \
        -o APT::Architectures::="arch2" \
        -o APT::Architectures::="arch3" \
        -o APT::Install-Recommends="false" \
        -o Aptitude::CmdLine::Fix-Broken="true" \
        -o Aptitude::CmdLine::Assume-Yes="true" \
        -o aptitude::CmdLine::Ignore-Trust-Violations="true" \
        $@ 
}

initapt() {
  list=$1
  mkdir -p $aptroot/{archives,lists}/partial
  if [ -f status.$list ]; then
    cp -f status.$list $aptroot/status
  else
    touch $aptroot/status
  fi
  if [ ! -f $list.packages.gz ]; then
    gzip $list.packages
  fi
  cp $list.packages.gz $aptroot/lists/Packages.gz
cat<<EOF > $aptroot/sources.list
deb [arch=arch1,arch2,arch3] file:$aptroot/lists/ ./
EOF
}

cleanup() {
  rm -Rf $aptroot
}

initapt $list
fakeapt update
#fakeaptitude update
fakeapt $command
#fakeaptitude $command
fakeaptcache $command
#cleanup
