Part of Slepp's ProjectsPastebinTURLImagebinFilebin
Feedback -- English French German Japanese
Create Upload Newest Tools Donate
Sign In | Create Account

Advertising

Anonymous
Saturday, May 5th, 2012 at 4:05:14pm MDT 

  1. #!/bin/bash
  2.  
  3. function aur_check {
  4.         STARTDIR=`pwd`
  5.         cd /var/cache/pacman
  6.         for r in `pacman -Qmq`; do
  7.                 wget "http://aur.archlinux.org/packages/$r/$r/PKGBUILD" >/dev/null 2>&1
  8.                 if [ $? -eq 0 ]; then
  9.                         LOCAL_VERSION_REL=`'pacman' -Q $r | awk '{print $2}'`
  10.                         LOCAL_VERSION=`echo $LOCAL_VERSION_REL| sed -e 's/-.*//g'`
  11.                         REMOTE_VERSION=`cat PKGBUILD | grep -E '^pkgver=' | sed -e 's/pkgver=//g' | sed -e 's/[ ]*//g'`
  12.                         REMOTE_REL=`cat PKGBUILD | grep -E '^pkgrel=' | sed -e 's/pkgrel=//g'`
  13.                         if [[ "$LOCAL_VERSION" < "$REMOTE_VERSION" ]]; then
  14.                                 printf "warning: $r: ignoring package upgrade ($LOCAL_VERSION_REL => ${REMOTE_VERSION}-${REMOTE_REL})\n"
  15.                         fi
  16.                 rm PKGBUILD
  17.                 fi
  18.         done
  19.         cd "$STARTDIR"
  20. }
  21.  
  22. function sync_check {
  23.         STARTDIR=`pwd`
  24.         cd /var/cache/pacman
  25.         IGNORED_PACKAGES=`cat /etc/pacman.conf | grep -E '^IgnorePkg' | sed -e 's/IgnorePkg[ ]*=[ ]*//g'`
  26.         for s in $IGNORED_PACKAGES; do
  27.                 REMOTE_VERSION_STRING=`'pacman' -Si $s 2>/dev/null | grep -E '^Version'`
  28.                 if [ $? -eq 0 ]; then
  29.                         REMOTE_VERSION_REL=`echo $REMOTE_VERSION_STRING | awk '{print $3}'`
  30.                         LOCAL_VERSION_STRING=`'pacman' -Q $s 2>/dev/null`
  31.                         if [ $? -eq 0 ]; then
  32.                                 LOCAL_VERSION_REL=`echo $LOCAL_VERSION_STRING | awk '{print $2}'`
  33.                                 printf "warning: $s: ignoring package upgrade ($LOCAL_VERSION_REL => $REMOTE_VERSION_REL)\n"
  34.                         fi
  35.                 fi
  36.         done
  37.         cd "$STARTDIR"
  38. }
  39.  
  40. function remove_crap {
  41.         # No docs or schemas.
  42.         if [ ! -e ./usr/share/gtk-doc/data/gtk-doc.make ]; then
  43.                 rm -rf 2>/dev/null ./usr/share/gtk-doc
  44.         fi
  45.         rm -rf 2>/dev/null ./usr/share/doc
  46.         rm -rf 2>/dev/null ./usr/share/gnome
  47.         rm -rf 2>/dev/null ./usr/share/gnome-control-center
  48.         rm -rf 2>/dev/null ./etc/gconf
  49.         # No MIME-type forcage!
  50.         find . -name *.desktop -exec sed -i -e '/MimeType=/d' {} \;
  51.         # Please delete this file. It is not necessary for linking the library.
  52.         if [ ! -e ./usr/bin/convert ]; then
  53.                 find . -name "*.la" -exec rm {} \;
  54.         fi
  55.         # Only one man directory please.
  56.         if [ -d ./usr/man ]; then
  57.                 if [ ! -d ./usr/share ]; then
  58.                         mkdir ./usr/share
  59.                 fi
  60.                 mv ./usr/man ./usr/share/man
  61.         fi
  62.         if [ -d ./usr/share/man ]; then
  63.                 cd ./usr/share/man
  64.                 ls | grep 'cat' | xargs rm -rf
  65.                 if [ -d ./man ]; then
  66.                         mv ./man/* .
  67.                         rm -rf ./man
  68.                 fi
  69.                 # Imposes what I consider to be a better naming convention for some reason.
  70.                 for t in `ls`; do
  71.                         if [ $t != 'man0' ] && [ $t != 'man1' ] && [ $t != 'man2' ] && [ $t != 'man3' ] && [ $t != 'man4' ] && [ $t != 'man5' ] && [ $t != 'man6' ] && [ $t != 'man7' ] && [ $t != 'man8' ] && [ $t != 'man9' ] && [ $t != 'mann' ] && [ $t != 'manm' ]; then
  72.                                 cd $t
  73.                                 for u in `ls`; do
  74.                                         cd $u
  75.                                         for v in `ls`; do
  76.                                                 SECOND_LAST_EXTENSION=`echo $v | sed -e 's/\.gz$//g' | rev | sed -e 's/\..*//g' | rev`
  77.                                                 PREFIX=`echo $v | sed -e 's/\.gz$//g' | sed -e "s/\.${SECOND_LAST_EXTENSION}//g"`
  78.                                                 SUFFIX=`echo $v | sed -e "s/$PREFIX//g"`
  79.                                                 if [ ! -h $v ]; then   
  80.                                                         install -D $v ../../${u}/${PREFIX}-${t}${SUFFIX}
  81.                                                 else
  82.                                                         TARGET=`readlink $v`
  83.                                                         TARGET_SECOND_LAST_EXTENSION=`echo $TARGET | sed -e 's/\.gz$//g' | rev | sed -e 's/\..*//g' | rev`
  84.                                                         TARGET_PREFIX=`echo $TARGET | sed -e 's/\.gz$//g' | sed -e "s/\.${TARGET_SECOND_LAST_EXTENSION}//g"`
  85.                                                         TARGET_SUFFIX=`echo $TARGET | sed -e "s/${TARGET_PREFIX}//g"`
  86.                                                         install -d ../../${u}
  87.                                                         ln -sf ${TARGET_PREFIX}-${t}${TARGET_SUFFIX} ../../${u}/${PREFIX}-${t}${SUFFIX}
  88.                                                 fi
  89.                                         done
  90.                                         cd ..
  91.                                 done
  92.                                 cd ..
  93.                                 rm -rf $t
  94.                         fi
  95.                 done
  96.                 # Now that it is nicely organized we can gzip everything and add symlinks.
  97.                 for x in `ls`; do
  98.                         cd $x
  99.                         for y in `ls`; do
  100.                                 echo $y | grep -q -E '\.gz$'
  101.                                 if [ $? -ne 0 ]; then
  102.                                         gzip $y >/dev/null 2>&1
  103.                                         SECOND_LAST_EXTENSION=`echo $y | rev | sed -e 's/\..*//g' | rev`
  104.                                         PREFIX=`echo $y | sed -e "s/\.${SECOND_LAST_EXTENSION}//g"`
  105.                                         NEW_NAME=`echo $PREFIX | sed -e 's/\./-/g'`
  106.                                         if [ $NEW_NAME != $PREFIX ]; then
  107.                                                 ln -sf ${y}.gz ${NEW_NAME}.${SECOND_LAST_EXTENSION}.gz
  108.                                         fi
  109.                                 else
  110.                                         SECOND_LAST_EXTENSION=`echo $y | sed -e 's/\.gz$//g' | rev | sed -e 's/\..*//g' | rev`
  111.                                         PREFIX=`echo $y | sed -e 's/\.gz//g' | sed -e "s/\.${SECOND_LAST_EXTENSION}//g"`
  112.                                         NEW_NAME=`echo $PREFIX | sed -e 's/\./-/g'`
  113.                                         if [ $NEW_NAME != $PREFIX ]; then
  114.                                                 ln -sf ${y} ${NEW_NAME}.${SECOND_LAST_EXTENSION}.gz
  115.                                         fi
  116.                                 fi
  117.                         done
  118.                         cd ..
  119.                 done
  120.                 cd ../../..
  121.         fi
  122.         # Converts info pages to man pages in the man9 directory
  123.         if [ -d ./usr/share/info ]; then
  124.                 if [ -d ./usr/share/man ]; then
  125.                         mkdir ./usr/share/man/man9
  126.                 else
  127.                         mkdir ./usr/share/man
  128.                         mkdir ./usr/share/man/man9
  129.                 fi
  130.                 cd ./usr/share/info
  131.                 for z in `ls`; do
  132.                         echo $z | grep -q -E '\.gz$'
  133.                         if [ $? -eq 0 ]; then
  134.                                 NAME=`echo $z | sed -e 's/\.gz$//g'`
  135.                                 NEWNAME=`echo $NAME | sed -e 's/\./-/g'`
  136.                                 gunzip $z
  137.                                 info2man $NAME > ../man/man9/${NEWNAME}
  138.                                 gzip ../man/man9/${NEWNAME} >/dev/null 2>&1
  139.                         else
  140.                                 NEWNAME=`echo $z | sed -e 's/\./-/g'`
  141.                                 info2man $z > ../man/man9/${NEWNAME}
  142.                                 gzip ../man/man9/${NEWNAME} >/dev/null 2>&1
  143.                         fi
  144.                 done
  145.                 cd ../../..
  146.                 rm -rf ./usr/share/info
  147.         fi
  148. }
  149.  
  150. function install_with_u {
  151.         ULTIMATE_ANSWER="y"
  152.         # Checks if there are package conflicts
  153.         CONFLICTS=`cat .PKGINFO | grep 'conflict = ' | awk '{print $3}'`
  154.         ACTUAL_CONFLICTS=""
  155.         for p in $CONFLICTS; do
  156.                 VERSION_CHECK=0
  157.                 CONFLICTING_PACKAGE=`echo $p | sed -r 's/(>|=|<).*//g'`
  158.                 # Checks if these conflicts actually affect packages on the system
  159.                 'pacman' -Q $CONFLICTING_PACKAGE >/dev/null 2>&1
  160.                 if [ $? -eq 0 ]; then
  161.                         AFFECTED=1
  162.                         if [ ${#p} -gt ${#CONFLICTING_PACKAGE} ]; then
  163.                                 AFFECTED=0
  164.                                 # If a version is specified, finds it out and sees if we're affected
  165.                                 CONFLICTING_VERSION_STRING=${p:${#CONFLICTING_PACKAGE}:${#p}-${#CONFLICTING_PACKAGE}}
  166.                                 RELATION=${CONFLICTING_VERSION_STRING:1:2}
  167.                                 if [ "$RELATION" = "=" ]; then
  168.                                         RELATION=${CONFLICTING_VERSION_STRING:0:1}${RELATION}
  169.                                         CONFLICTING_VERSION=${CONFLICTING_VERSION_STRING:2:${#CONFLICTING_VERSION_STRING}-2}
  170.                                 else
  171.                                         RELATION=${CONFLICTING_VERSION_STRING:0:1}
  172.                                         CONFLICTING_VERSION=${CONFLICTING_VERSION_STRING:1:${#CONFLICTING_VERSION_STRING}-1}
  173.                                 fi
  174.                                 # If the conflicting package is being downloaded as we speak, the non-conflicting version will soon be available
  175.                                 ls /var/cache/pacman/tmp | grep -q "$CONFLICTING_PACKAGE"
  176.                                 if [ $? -eq 0 ]; then
  177.                                         AFFECTED=0
  178.                                 else
  179.                                         ACTUAL_VERSION=`pacman -Q $CONFLICTING_PACKAGE | awk '{print $2}'`
  180.                                         if [ "$RELATION" = ">" ]; then
  181.                                                 if [[ "$ACTUAL_VERSION" > "$CONFLICTING_VERSION" ]]; then
  182.                                                         AFFECTED=1
  183.                                                 fi
  184.                                         elif [ "$RELATION" = "<" ]; then
  185.                                                 if [[ "$ACTUAL_VERSION" < "$CONFLICTING_VERSION" ]]; then
  186.                                                         AFFECTED=1
  187.                                                 fi
  188.                                         elif [ "$RELATION" = ">=" ]; then
  189.                                                 if [ "$ACTUAL_VERSION" >= "$CONFLICTING_VERSION" ]; then
  190.                                                         AFFECTED=1
  191.                                                 fi
  192.                                         elif [ "$RELATION" = "<=" ]; then
  193.                                                 if [ "$ACTUAL_VERSION" <= "$CONFLICTING_VERSION" ]; then
  194.                                                         AFFECTED=1
  195.                                                 fi
  196.                                         else
  197.                                                 if [ "$ACTUAL_VERSION" = "$CONFLICTING_VERSION" ]; then
  198.                                                         AFFECTED=1
  199.                                                 fi
  200.                                         fi
  201.                                 fi
  202.                         fi
  203.                         if [ $AFFECTED -ne 0 ]; then
  204.                                 ACTUAL_CONFLICTS="$ACTUAL_CONFLICTS $CONFLICTING_PACKAGE"
  205.                                 printf ":: ${1} conflicts with ${CONFLICTING_PACKAGE}. Remove ${CONFLICTING_PACKAGE}? [Y/n] "
  206.                                 read ANSWER
  207.                                 if [ $ANSWER != "Y" ] && [ $ANSWER != "y" ]; then
  208.                                         ULTIMATE_ANSWER="n"
  209.                                         break
  210.                                 fi
  211.                         fi
  212.                 fi
  213.         done
  214.         if [ $ULTIMATE_ANSWER = "y" ]; then
  215.                 for q in $ACTUAL_CONFLICTS; do
  216.                         'pacman' -Rdd ${q}
  217.                 done
  218.                 return 0
  219.         fi
  220.         return 1
  221. }
  222.  
  223. function get_deps {
  224.         PACKAGE_NAME=`cat .PKGINFO | grep 'pkgname = ' | sed -e 's/pkgname = //g'`
  225.        
  226.         # Does a few package specific things
  227.         if [ "$PACKAGE_NAME" = "linux" ]; then
  228.                 echo ""
  229.         #elif [ "$PACKAGE_NAME" = "firefox" ]; then
  230.         #       cd ./usr/lib
  231.         #       FIREFOX_DIR=`ls | grep 'firefox'`
  232.         #       if [ $? -eq 0 ]; then
  233.         #              cd $FIREFOX_DIR/chrome
  234.         #              jar -xf ./browser.jar
  235.         #              rm ./browser.jar
  236.         #              sed -i -e '/console.xul/s/^/\/\//g' ./content/browser/browser.js
  237.         #              jar -cf browser.jar content
  238.         #              rm -r content
  239.         #              cd ../..
  240.         #       fi
  241.         #       cd ../..
  242.         elif [ "$PACKAGE_NAME" = "gstreamer0.10-good-plugins" ]; then
  243.                 rm ./usr/lib/gstreamer-0.10/libgstesd.so
  244.                 rm ./usr/lib/gstreamer-0.10/libgstsouphttpsrc.so
  245.                 rm ./usr/lib/gstreamer-0.10/libgstgconfelements.so
  246.                 rm ./usr/lib/gstreamer-0.10/libgsthalelements.so
  247.                 sed -i -e '/^depend\ =\ esound/d' .PKGINFO
  248.                 sed -i -e '/^depend\ =\ libsoup-gnome/d' .PKGINFO
  249.                 sed -i -e '/^depend\ =\ gconf/d' .PKGINFO
  250.                 sed -i -e '/^depend\ =\ hal/d' .PKGINFO
  251.         elif [ "$PACKAGE_NAME" = "libao" ]; then
  252.                 rm ./usr/lib/ao/plugins-4/libesd.so
  253.         elif [ "$PACKAGE_NAME" = "meld" ]; then
  254.                 rm ./usr/lib/meld/meld/ui/notebooklabel.pyc
  255.                 sed -i -e '/self\.set_size_request/s/^/#/' ./usr/lib/meld/meld/ui/notebooklabel.py
  256.                 sed -i -e '/label\.set_ellipsize/s/^/#/' ./usr/lib/meld/meld/ui/notebooklabel.py
  257.         elif [ "$PACKAGE_NAME" = "flac" ]; then
  258.                 rm -r ./usr/lib/xmms
  259.         elif [ "$PACKAGE_NAME" = "initscripts" ]; then
  260.                 mv ./etc/rc.d/network ./etc/rc.d/network.orig
  261.         elif [ "$PACKAGE_NAME" = "python2-matplotlib" ]; then
  262.                 rm -r ./usr/lib/python2.7/site-packages/matplotlib/tests
  263.         elif [ "$PACKAGE_NAME" = "kino" ]; then
  264.                 mv ./usr/share/kino/scripts/import/media.sh ./usr/share/kino/scripts/import/media.sh.orig
  265.         fi
  266.        
  267.         POSSIBLE_LIBS=`find . -type f | grep -E '(\.so\.|\.so$)'`
  268.         POSSIBLE_BINS=`find . -type f | grep -v 'PKGINFO' | grep -v -E '\/.*\.[a-zA-Z0-9]+$' | grep -v 'LICENSE'`
  269.         POSSIBLE_ELFS="$POSSIBLE_LIBS $POSSIBLE_BINS"
  270.         DEPS=""
  271.  
  272.         # Makes a list of all the direct dependencies
  273.         for i in $POSSIBLE_ELFS; do
  274.                 #echo "SCANNING: $i"
  275.                 #ldd $i >/dev/null 2>&1
  276.                 readelf -d $i >/dev/null 2>&1
  277.                 if [ $? -eq 0 ]; then
  278.                         # Caches the shared libraries in a file to make it easier for everything else to look them up
  279.                         DIRNAME=`dirname ${i:1:${#i}}`
  280.                         echo "$i" | grep -q ".so"
  281.                         if [ $? -eq 0 ]; then
  282.                                 if [ "$DIRNAME" = "/lib" ] || [ "$DIRNAME" = "/usr/lib" ]; then
  283.                                         grep -q "${i:1:${#i}} $PACKAGE_NAME" /var/cache/pacman/quicklookup
  284.                                         # If this package's library assigned to this package was not found...
  285.                                         if [ $? -ne 0 ]; then
  286.                                                 grep -q "${i:1:${#i}}" /var/cache/pacman/quicklookup
  287.                                                 # It may have been assigned to another package so we change that
  288.                                                 if [ $? -eq 0 ]; then
  289.                                                         sed -i -e "/${i:1:${#i}}/d" /var/cache/pacman/quicklookup
  290.                                                 fi
  291.                                                 # Otherwise we just assign it to this package
  292.                                                 echo "${i:1:${#i}} $PACKAGE_NAME" >> /var/cache/pacman/quicklookup
  293.                                         fi
  294.                                 fi
  295.                         fi
  296.                         # Figures out what packages own the library dependencies
  297.                         #POSSIBLE_DEPS=`ldd $i 2>/dev/null | grep '=> ' | grep -v '=>  ' | sed -e 's/.* => //g' | sed -e 's/ (.*//g'`
  298.                         POSSIBLE_DEPS=`readelf -d $i 2>/dev/null | grep 'NEEDED' | sed -e 's/.*library:\ \[//g' | sed -e 's/\]//g'`
  299.                         for j in $POSSIBLE_DEPS; do
  300.                                 #DIRNAME=`dirname $j`
  301.                                 #if [ "$DIRNAME" = "/lib" ] || [ "$DIRNAME" = "/usr/lib" ]; then
  302.                                         OWNER=`grep "$j" /var/cache/pacman/quicklookup`
  303.                                         # The owner of the dep is either already in the quicklookup file
  304.                                         if [ $? -eq 0 ]; then
  305.                                                 OWNER=`echo $OWNER | awk '{print $2}'`
  306.                                                 DEPS="$DEPS $OWNER"
  307.                                         else
  308.                                                 # Or it's part of the current package
  309.                                                 #BASENAME=`basename $j`
  310.                                                 #find . -name ${BASENAME} | grep -q "${BASENAME}"
  311.                                                 find . -name $j | grep -q $j
  312.                                                 if [ $? -eq 0 ]; then
  313.                                                         echo "/usr/lib/$j $PACKAGE_NAME" >> /var/cache/pacman/quicklookup
  314.                                                 else
  315.                                                         # Or we figure out its owner with pacman and put it in the quicklookup file
  316.                                                         OWNER=`'pacman' -Qoq "/usr/lib/$j" 2>/dev/null`
  317.                                                         if [ $? -eq 0 ]; then
  318.                                                                 echo "$j $OWNER" >> /var/cache/pacman/quicklookup
  319.                                                                 DEPS="$DEPS $OWNER"
  320.                                                         fi
  321.                                                 fi
  322.                                         fi
  323.                                 #fi
  324.                         done
  325.                 fi
  326.         done
  327.  
  328.         # Sticks a "kernel26" between the old dependencies and the new dependencies
  329.         CURRENT_DEPS=`cat .PKGINFO | grep -E '^depend = ' | sed -e 's/depend = //g'`
  330.         DEPS="$CURRENT_DEPS kernel26a $DEPS"
  331.  
  332.         # Puts them into the PKGINFO file so that all depend lines are contiguous
  333.         grep -q -E '^depend = ' .PKGINFO
  334.         if [ $? -eq 0 ]; then
  335.                 FIRST_DEPEND_LINE_NUMBER=`grep -n -E '^depend = ' .PKGINFO | head -1 | sed -e 's/:.*//g'`
  336.                 LAST_DEPEND_LINE_NUMBER=`grep -n -E '^depend = ' .PKGINFO | tail -1 | sed -e 's/:.*//g'`
  337.                 LAST_LINE_NUMBER=`wc -l .PKGINFO | awk '{print $1}'`
  338.                 (( DIFFERENCE=$LAST_LINE_NUMBER-$LAST_DEPEND_LINE_NUMBER ))
  339.                 cat .PKGINFO | tail -${DIFFERENCE} > .PKGINFO-3
  340.                 touch .PKGINFO-2
  341.                 (( FIRST_DEPEND_LINE_NUMBER-- ))
  342.                 cat .PKGINFO | head -${FIRST_DEPEND_LINE_NUMBER} > .PKGINFO-1
  343.         else
  344.                 cp .PKGINFO .PKGINFO-1
  345.                 touch .PKGINFO-2
  346.                 touch .PKGINFO-3
  347.         fi
  348.         for k in $DEPS; do
  349.                 echo "depend = $k" >> .PKGINFO-2
  350.         done
  351.         # This is all so we don't get mesa and mesa=7.5 in the same dep array
  352.         cat .PKGINFO-2 | awk '{print $3}' | sed -r 's/(>=|>|=|<|<=)/ \1/g' > .RAW-DEPS
  353.         cat .RAW-DEPS | awk '{print $1}' > .COL-1
  354.         cat .RAW-DEPS | awk '{print $2}' > .COL-2
  355.         # Got this from sed1line.txt... it removes duplicate lines
  356.         sed -i -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P' .COL-1
  357.         paste --delimiter="" .COL-1 .COL-2 > .RAW-DEPS
  358.         sed -i -e "/${PACKAGE_NAME}/d" .RAW-DEPS
  359.         sed -i -e 's/kernel26a/kernel26/g' .RAW-DEPS
  360.         sed -e 's/^/depend = /g' .RAW-DEPS > .PKGINFO-2
  361.         sed -i -e "/depend =[ ]*$/d" .PKGINFO-2
  362.         cat .PKGINFO-1 .PKGINFO-2 .PKGINFO-3 > .PKGINFO
  363.         rm .PKGINFO-1 .PKGINFO-2 .PKGINFO-3 .RAW-DEPS .COL-1 .COL-2
  364. }
  365.  
  366. function do_install {
  367.         STARTDIR=`pwd`
  368.         cd /var/cache/pacman/tmp
  369.         # We don't want to screw with pacman or glibc
  370.         HOLD_PACKAGES=`cat /etc/pacman.conf | grep -E '^HoldPkg' | sed -e 's/HoldPkg[ ]*=[ ]*//g'`
  371.         for s in $HOLD_PACKAGES; do
  372.                 SUSPECTS=`ls | grep "$s-"`
  373.                 if [ $? -eq 0 ]; then
  374.                         for l in $SUSPECTS; do
  375.                                 TEMP_NAME=`echo $l | sed -r 's/(-i686|-x86_64|-any|)\.pkg\.tar\.(g|x)z//g'`
  376.                                 HYPHEN_SUFFIX=`echo $TEMP_NAME | sed -e "s/$s-//" | sed -e 's/-//'`
  377.                                 echo $HYPHEN_SUFFIX | grep -q '-'
  378.                                 if [ $? -ne 0 ]; then
  379.                                         printf ":: $s is designated as a HoldPkg."
  380.                                         exit 1
  381.                                 fi
  382.                         done
  383.                 fi
  384.         done
  385.         for l in `ls -tr`; do
  386.                 REASON=0
  387.                 TEMP_DIR=`echo "$l" | sed -r 's/(-i686|-x86_64|-any|)\.pkg\.tar\.(g|x)z//g'`
  388.                 # Makes sure it doesn't install two versions of the same package
  389.                 TO_BE_REMOVED_1=`echo "$TEMP_DIR" | rev | sed -e 's/-.*//'`
  390.                 INTERMEDIATE_PACKAGE_NAME=`echo "$TEMP_DIR" | rev | sed -e "s/${TO_BE_REMOVED_1}-//"`
  391.                 TO_BE_REMOVED_2=`echo "$INTERMEDIATE_PACKAGE_NAME" | sed -e 's/-.*//'`
  392.                 PACKAGE_NAME=`echo "$INTERMEDIATE_PACKAGE_NAME" | sed -e "s/${TO_BE_REMOVED_2}-//" | rev`
  393.                 for m in `ls -tr | grep -v "$l"`; do
  394.                         NEW_TEMP_DIR=`echo "$m" | sed -r 's/(-i686|-x86_64|-any|)\.pkg\.tar\.(g|x)z//g'`
  395.                         NEW_TO_BE_REMOVED_1=`echo "$NEW_TEMP_DIR" | rev | sed -e 's/-.*//'`
  396.                         NEW_INTERMEDIATE_PACKAGE_NAME=`echo "$NEW_TEMP_DIR" | rev | sed -e "s/${NEW_TO_BE_REMOVED_1}-//"`
  397.                         NEW_TO_BE_REMOVED_2=`echo $"NEW_INTERMEDIATE_PACKAGE_NAME" | sed -e 's/-.*//'`
  398.                         NEW_PACKAGE_NAME=`echo "$NEW_INTERMEDIATE_PACKAGE_NAME" | sed -e "s/${NEW_TO_BE_REMOVED_2}-//" | rev`
  399.                         if [ "$PACKAGE_NAME" = "$NEW_PACKAGE_NAME" ]; then
  400.                                 mv "$l" ../pkg
  401.                                 break;
  402.                         fi
  403.                 done
  404.                 # Extracts the package and makes the necessary modifications to it
  405.                 mkdir "$TEMP_DIR"
  406.                 mv "$l" "$TEMP_DIR"
  407.                 cd "$TEMP_DIR"
  408.                 tar -xf "./$l" >/dev/null 2>&1
  409.                 rm "$l"
  410.                 remove_crap
  411.                 get_deps
  412.                 # Retars the package and installs it
  413.                 if [ -e .INSTALL ]; then
  414.                         tar -cf "./$l" .INSTALL .PKGINFO * >/dev/null 2>&1
  415.                 else
  416.                         tar -cf "./$l" .PKGINFO * >/dev/null 2>&1
  417.                 fi
  418.                 # Installs it and puts it in the cache
  419.                 install_with_u $l
  420.                 if [ $? -eq 0 ]; then
  421.                         if [ $# -eq 0 ]; then
  422.                                 # If there are no arguments, we are doing a mass upgrade and we keep the same install reasons packages had before
  423.                                 'pacman' -Q ${PACKAGE_NAME} >/dev/null 2>&1
  424.                                 if [ $? -eq 0 ]; then
  425.                                         'pacman' -Qi ${PACKAGE_NAME} | grep -q 'Installed as a dependency for another package'
  426.                                         if [ $? -eq 0 ]; then
  427.                                                 REASON=1
  428.                                         fi
  429.                                 fi
  430.                         else
  431.                                 # If there are arguments we must search them for the given package to see if it is explicit
  432.                                 ARGLIST=" $@ "
  433.                                 echo $ARGLIST | grep -q "${PACKAGE_NAME}"
  434.                                 if [ $? -ne 0 ]; then
  435.                                         REASON=1
  436.                                 fi
  437.                         fi
  438.                         if [ $REASON -eq 1 ]; then
  439.                                 'pacman' -Uddf --noconfirm --asdeps $l
  440.                         else
  441.                                 'pacman' -Uddf --noconfirm $l
  442.                         fi
  443.                 else
  444.                         mv $l ../../pkg
  445.                         cd ..
  446.                         rm -r $TEMP_DIR
  447.                         break;
  448.                 fi
  449.                 mv $l ../../pkg
  450.                 cd ..
  451.                 rm -r $TEMP_DIR
  452.         done
  453.         cd "$STARTDIR"
  454. }
  455.  
  456. function get_answer {
  457.         read ANSWER
  458.         echo $ANSWER > /var/cache/pacman/answer
  459.         echo $ANSWER
  460. }
  461.  
  462. if [ "$1" = "-Syu" ]; then
  463.         #sync_check
  464.         #aur_check
  465.         'pacman' --cachedir /var/cache/pacman/tmp -Syuw
  466.         do_install
  467. elif [ "$1" = "-Su" ]; then
  468.         #sync_check
  469.         #aur_check
  470.         'pacman' --cachedir /var/cache/pacman/tmp -Suw
  471.         do_install
  472. elif [ "$1" = "-S" ]; then
  473.         # If the temporary cache and its contents still exist, they will be installed when we don't want them to be
  474.         rm -r /var/cache/pacman/tmp
  475.         mkdir /var/cache/pacman/tmp
  476.         shift
  477.         PACKAGE_ARRAY=""
  478.         # If something we're installing is in the cache... move it to the temporary cache
  479.         for n in $@; do
  480.                 if [ ${n:0:1} != "-" ]; then
  481.                         NUM_MATCHES=`ls -1 /var/cache/pacman/pkg | grep -E "^${n}-" | wc -l`
  482.                         for o in `seq 1 $NUM_MATCHES`; do
  483.                                 MOVE_MATCH=0
  484.                                 POSSIBLE_MATCH=`ls -r /var/cache/pacman/pkg | grep -E "^${n}-" -m${o} | tail -1`
  485.                                 HYPHENS=`echo $POSSIBLE_MATCH | sed -e "s/${n}//g" | grep -o "-" | wc -l`
  486.                                 if [ $HYPHENS -le 3 ]; then
  487.                                         VERSION=`'pacman' -Si ${n} | grep 'Version' | awk '{print $3}'`
  488.                                         echo $POSSIBLE_MATCH | grep -q "$VERSION"
  489.                                         if [ $? -eq 0 ]; then
  490.                                                 mv /var/cache/pacman/pkg/${POSSIBLE_MATCH} /var/cache/pacman/tmp
  491.                                                 # Changes the stored md5sum temporarily - I don't know a better way to do this
  492.                                                 TEMP_DIR=`echo ${POSSIBLE_MATCH} | sed -r 's/(-i686|-x86_64|-any|)\.pkg\.tar\.(g|x)z//g'`
  493.                                                 find /var/lib/pacman/sync -name $TEMP_DIR | grep -q $TEMP_DIR
  494.                                                 if [ $? -eq 0 ]; then
  495.                                                         MD5SUM=`md5sum /var/cache/pacman/tmp/${POSSIBLE_MATCH} | awk '{print $1}'`
  496.                                                         REPOS=`find /var/lib/pacman/sync -name $TEMP_DIR | sed -e 's/\// /g' | awk '{print $5}'`
  497.                                                         sed -i '/%MD5SUM%/G' /var/lib/pacman/sync/$REPOS/$TEMP_DIR/desc
  498.                                                         MD5_LINE_NUMBER=`grep -n '%MD5SUM%' /var/lib/pacman/sync/$REPOS/$TEMP_DIR/desc | sed -e 's/:.*//g'`
  499.                                                         (( MD5_LINE_NUMBER++ ))
  500.                                                         sed -i -e "${MD5_LINE_NUMBER}s/.*/${MD5SUM}/" /var/lib/pacman/sync/$REPOS/$TEMP_DIR/desc
  501.                                                         PACKAGE_ARRAY="${PACKAGE_ARRAY} ${REPOS}/${TEMP_DIR}"
  502.                                                 fi
  503.                                                 break;
  504.                                         fi
  505.                                 fi
  506.                         done
  507.                 fi
  508.         done
  509.         # Pacman is run and then a function reads a y or an n from stdin and passes it to pacman's stdin
  510.         get_answer | 'pacman' --cachedir /var/cache/pacman/tmp -Sw $@
  511.         # The function also saves it in a file so we know whether to proceed or cancel because pacman was cancelled
  512.         LETTER=`cat /var/cache/pacman/answer`
  513.         if [ "$LETTER" = "y" ] || [ "$LETTER" = "Y" ]; then
  514.                 do_install $@
  515.         else
  516.                 # If anything got moved to the temporary cache for this it is sent back to the main one
  517.                 FILES_IN_CACHE=`ls /var/cache/pacman/tmp | wc -l`
  518.                 if [ $FILES_IN_CACHE -ne 0 ]; then
  519.                         mv /var/cache/pacman/tmp/* /var/cache/pacman/pkg
  520.                 fi
  521.         fi
  522.         # Changes all the md5sums back
  523.         for w in $PACKAGE_ARRAY; do
  524.                 MD5_LINE_NUMBER=`grep -n '%MD5SUM%' /var/lib/pacman/sync/$w/desc | sed -e 's/:.*//g'`
  525.                 (( MD5_LINE_NUMBER++ ))
  526.                 sed -i -e "${MD5_LINE_NUMBER}d" /var/lib/pacman/sync/$w/desc
  527.         done
  528. elif [ "$1" = "-U" ]; then
  529.         STARTDIR=`pwd`
  530.         TEMP_DIR=`echo $2 | sed -r 's/(-i686|-x86_64|-any|)\.pkg\.tar\.(g|x)z//g'`
  531.         mkdir /var/cache/pacman/$TEMP_DIR
  532.         cp "$2" /var/cache/pacman/$TEMP_DIR || return 1
  533.         cd /var/cache/pacman/$TEMP_DIR
  534.         tar -xf $2 >/dev/null 2>&1
  535.         rm $2
  536.         get_deps
  537.         # Retars the package and installs it
  538.         if [ -e .INSTALL ]; then
  539.                 tar -cf $2 .INSTALL .PKGINFO * >/dev/null 2>&1
  540.         else
  541.                 tar -cf $2 .PKGINFO * >/dev/null 2>&1
  542.         fi
  543.         install_with_u $2
  544.         if [ $? -eq 0 ]; then
  545.                 'pacman' -U --noconfirm $2
  546.         fi
  547.         cd ..
  548.         rm -r $TEMP_DIR
  549.         cd "$STARTDIR"
  550. elif [ "$1" = "-Qi" ] || [ "$1" = "-Qii" ]; then
  551.         INITIAL_ARG=$1
  552.         shift
  553.         if [ "$INITIAL_ARG" = "-Qi" ]; then
  554.                 'pacman' -Qi $@ > /var/cache/pacman/tempquery
  555.         else
  556.                 'pacman' -Qii $@ > /var/cache/pacman/tempquery
  557.         fi
  558.         if [ $? -ne 0 ] || [ ! -e /var/cache/pacman/tempquery ]; then
  559.                 exit 1
  560.         fi
  561.        
  562.         # Filters out all deps after kernel26 for a regular query
  563.         # Filters out all deps before kernel26 for a verbose query
  564.         if [ $? -eq 0 ]; then
  565.                 START_LINE_NUMBER=`cat /var/cache/pacman/tempquery | grep -n 'Depends On' | sed -e 's/:.*//g'`
  566.                 LINE_NUMBER=$START_LINE_NUMBER
  567.                 (( LINE_NUMBER=$LINE_NUMBER+1 ))
  568.                 cat /var/cache/pacman/tempquery | head -${LINE_NUMBER} | tail -1 | grep ':'>/dev/null 2>&1
  569.                 while [ $? -ne 0 ]; do
  570.                         (( LINE_NUMBER=$LINE_NUMBER+1 ))
  571.                         cat /var/cache/pacman/tempquery | head -${LINE_NUMBER} | tail -1 | grep ':'>/dev/null 2>&1
  572.                 done
  573.                 (( END_LINE_NUMBER=$LINE_NUMBER-1 ))
  574.                 (( DIFFERENCE=$LINE_NUMBER-$START_LINE_NUMBER ))
  575.                 OLD_DEP_LIST=`cat /var/cache/pacman/tempquery | head -${END_LINE_NUMBER} | tail -${DIFFERENCE} | sed -e 's/.* : //g' | sed -e 's/                 //g'`
  576.  
  577.                 for k in $OLD_DEP_LIST; do
  578.                         if [ "$INITIAL_ARG" = "-Qi" ]; then
  579.                                 if [ "$k" != "kernel26" ]; then
  580.                                         NEW_DEP_LIST="$NEW_DEP_LIST $k"
  581.                                 else
  582.                                         break
  583.                                 fi
  584.                         else
  585.                                 if [ "$k" != "kernel26" ]; then
  586.                                         NEW_DEP_LIST="$NEW_DEP_LIST $k"
  587.                                 fi
  588.                         fi
  589.                 done
  590.         fi
  591.        
  592.         # Removes the old deps array and replaces it with the new one
  593.         sed -i -e "${START_LINE_NUMBER},${END_LINE_NUMBER}d" /var/cache/pacman/tempquery
  594.         (( START_LINE_NUMBER=$START_LINE_NUMBER-1 ))
  595.         END_LINE_NUMBER=`wc -l /var/cache/pacman/tempquery | awk '{print $1}'`
  596.         (( DIFFERENCE=$END_LINE_NUMBER-$START_LINE_NUMBER ))
  597.         cat /var/cache/pacman/tempquery | head -${START_LINE_NUMBER} > /var/cache/pacman/tempquery-1
  598.         cat /var/cache/pacman/tempquery | tail -${DIFFERENCE} > /var/cache/pacman/tempquery-3
  599.         CURRENT_LINE=""
  600.         CURRENT_LINE_NUMBER=1
  601.         for m in $NEW_DEP_LIST; do
  602.                 if (( ${#CURRENT_LINE}+${#m}+1<=63 )); then
  603.                         CURRENT_LINE="$CURRENT_LINE $m"
  604.                 else
  605.                         if [ $CURRENT_LINE_NUMBER -eq 1 ]; then
  606.                                 printf "Depends On     :$CURRENT_LINE\n" >> /var/cache/pacman/tempquery-2
  607.                         else
  608.                                 printf "\t\t$CURRENT_LINE\n" >> /var/cache/pacman/tempquery-2
  609.                         fi
  610.                         CURRENT_LINE=" $m"
  611.                         CURRENT_LINE_NUMBER=0
  612.                 fi
  613.         done
  614.         if [ $CURRENT_LINE_NUMBER -eq 1 ]; then
  615.                 printf "Depends On     :$CURRENT_LINE\n" >> /var/cache/pacman/tempquery-2
  616.         else
  617.                 printf "\t\t$CURRENT_LINE\n" >> /var/cache/pacman/tempquery-2
  618.         fi
  619.         cat /var/cache/pacman/tempquery-1 /var/cache/pacman/tempquery-2 /var/cache/pacman/tempquery-3 > /var/cache/pacman/tempquery
  620.        
  621.         # Removes the requirements array for a regular query
  622.         if [ "$INITIAL_ARG" = "-Qi" ]; then
  623.                 START_LINE_NUMBER=`cat /var/cache/pacman/tempquery | grep -n 'Required By' | sed -e 's/:.*//g'`
  624.                 LINE_NUMBER=$START_LINE_NUMBER
  625.                 (( LINE_NUMBER=$LINE_NUMBER+1 ))
  626.                 cat /var/cache/pacman/tempquery | head -${LINE_NUMBER} | tail -1 | grep ':'>/dev/null 2>&1
  627.                 while [ $? -ne 0 ]; do
  628.                         (( LINE_NUMBER++ ))
  629.                         cat /var/cache/pacman/tempquery | head -${LINE_NUMBER} | tail -1 | grep ':'>/dev/null 2>&1
  630.                 done
  631.                 (( END_LINE_NUMBER=$LINE_NUMBER-1 ))
  632.                 sed -i -e "${START_LINE_NUMBER},${END_LINE_NUMBER}d" /var/cache/pacman/tempquery
  633.         fi
  634.        
  635.         cat /var/cache/pacman/tempquery
  636.         rm /var/cache/pacman/tempquery /var/cache/pacman/tempquery-1 /var/cache/pacman/tempquery-2 /var/cache/pacman/tempquery-3
  637. elif [ "$1" = "-Scc" ]; then
  638.         LINE_NUMBER=0
  639.         for z in `cat /var/cache/pacman/quicklookup | awk '{print $1}'`; do
  640.                 (( LINE_NUMBER++ ))
  641.                 if [ ! -e $z ]; then
  642.                         sed -i -e "${LINE_NUMBER}d" /var/cache/pacman/quicklookup
  643.                         (( LINE_NUMBER-- ))
  644.                 fi
  645.         done
  646.         'pacman' -Scc
  647. else
  648.         'pacman' $@
  649. fi

advertising

Update the Post

Either update this post and resubmit it with changes, or make a new post.

You may also comment on this post.

update paste below
details of the post (optional)

Note: Only the paste content is required, though the following information can be useful to others.

Save name / title?

(space separated, optional)



Please note that information posted here will expire by default in one month. If you do not want it to expire, please set the expiry time above. If it is set to expire, web search engines will not be allowed to index it prior to it expiring. Items that are not marked to expire will be indexable by search engines. Be careful with your passwords. All illegal activities will be reported and any information will be handed over to the authorities, so be good.