Advertisement
mateorod

auto_patcher3.1.diff

Aug 27th, 2013
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 12.97 KB | None | 0 0
  1. diff --git a/auto_patcher b/auto_patcher
  2. index eb3a8c4..58358e8 100755
  3. --- a/auto_patcher
  4. +++ b/auto_patcher
  5. @@ -148,15 +148,16 @@
  6.  # 2013.08.07. (v3.0.0) Support for Android-4.3 (Opendproid only- CM and AOSP).
  7.  # 2013.08.09. (v3.0.1) Build date and patch date matching for multiple mods- all mods will now use best available match.
  8.  # 2013.08.12. (v3.0.2) OpD support for Evervolv, PACman and PA and CM10 returns
  9. +# 2013.08.12. (v3.1.0) The big switch to SMALI.patch instead of JAR.patch. It begins...
  10.  
  11.  
  12.  # SHELL PROGRAMMING NOTES:
  13.  # [ -s FILE ]
  14.  # [[ -n STRING ]] or [[ -z STRING ]]
  15.  
  16. -VERSION="v3.0.21"
  17. +VERSION="v3.1.0"
  18.  # PATCHES_VERSION needs to be incremented every time ANY changes occur to patches.
  19. -PATCHES_VERSION="20130814"
  20. +PATCHES_VERSION="20130827"
  21.  CURRENT_ANDROID="4.3.0"
  22.  
  23.  # pass variables to children
  24. @@ -453,6 +454,7 @@ copy_prepatched_provisional () {
  25.  
  26.  prep_alternate_patch () {
  27.       # Use alt.patch, if exists. Increment in case there are multiple alternates.
  28. +     # DEPRECATED as of the upcoming 3.1.0
  29.       mv -v $ALTERNATIVE_PATCH $PARB/${NAME}.patch >> "$LOG"
  30.       ALT_PATCH_NUMBER=$(($ALT_PATCH_NUMBER + 1))
  31.  
  32. @@ -513,7 +515,7 @@ establish_repo() {
  33.            if ($NETWORK); then
  34.                 mv -v auto-patcher/".git" . >> "$LOG"
  35.                 rm -rf auto-patcher
  36. -               git checkout -q master || auto_update_error
  37. +               git checkout -q 3.1 || auto_update_error
  38.                 git reset --hard 2>&1 >> "$LOG"
  39.                 echo ""
  40.            fi
  41. @@ -1246,7 +1248,7 @@ if [[ "$AUTO_UPDATE" == true ]] && [[ "$GIT" == true ]]; then
  42.            if !("$NETWORK"); then
  43.                 printtask "Updater: not able to run auto_update."
  44.            else
  45. -               COMMITS_BEHIND=$(git rev-list HEAD..origin/master --count)
  46. +               COMMITS_BEHIND=$(git rev-list HEAD..origin/3.1 --count)
  47.                 case "$COMMITS_BEHIND" in
  48.                 0)
  49.                      printtask "Updater: Auto-Patcher is already up to date"
  50. @@ -1256,7 +1258,7 @@ if [[ "$AUTO_UPDATE" == true ]] && [[ "$GIT" == true ]]; then
  51.                      printtask "... Updater: update found ..."
  52.                      backup_script
  53.                      printtask "... Updating Auto-Patcher ..."
  54. -                    git merge --no-edit origin/master 2>&1 >> "$LOG" || auto_update_error
  55. +                    git merge --no-edit origin/3.1 2>&1 >> "$LOG" || auto_update_error
  56.                      export_log_and_variables
  57.                      printtask "### updated, now rerunning script with latest version ###"
  58.                      $0 "$@"
  59. @@ -1729,13 +1731,66 @@ for ((i=0; i < ${#PID[@]}; i++)); do
  60.       echo "### jar patch $P/$A/$R/$B ###" >> "$LOG"
  61.  
  62.       # Iterate through jars and patch. If fails, try prepatched provisionals or look for alternative patch.
  63. +
  64. +context_editor (){
  65. +     # This was originally planned to remove some unsused CM ContextImpl patches..but now it exists to force
  66. +     # efficacy if CM patches are forced on an AOSP-based rom, or AOSP patches on a CM-based.
  67. +
  68. +     # Counts the number of ContextImpl patches in the decompiled jar. Easy enough.
  69. +     CONTEXT_FILES=(tmp/system/framework/framework.jar.out/smali/android/app/ContextImpl*)
  70. +     if ( [ ${#CONTEXT_FILES[@]} == 48 ] ); then
  71. +          # Indicates CM-based roms (PACman, CM)
  72. +          print_to_log "CM-based ContextImpl matching implemented"
  73. +          ROM_BASE=cm
  74. +     elif ( [ ${#CONTEXT_FILES[@]} == 44 ] ); then
  75. +          # Indicates AOSP-based roms (PA, AOSP, Slim, AOKP(?))
  76. +          print_to_log "AOSP-based ContextImpl matching implemented"
  77. +          ROM_BASE=aosp
  78. +     else
  79. +          # Alerts us we need to expand the model, but leaves QUEUES alone for now
  80. +          print_to_log "There are ${#CONTEXT_FILES[@]} context files in this rom"
  81. +          ROM_BASE=$RID
  82. +     fi
  83. +
  84. +     # Remove the, unlikely but possibly, mismatched ContextImpl patches from all Queues
  85. +     FAILED_PATCH_QUEUE=( ${FAILED_PATCH_QUEUE[@]//*'ContextImpl'*} )
  86. +     PATCH_QUEUE=( ${PATCH_QUEUE[@]//*'ContextImpl'*} )
  87. +
  88. +     # Add the proper ContextImpl patches to the PATCH_QUEUE
  89. +     PATCH_QUEUE+=(patches/$P/$A/$ROM_BASE/latest/*'ContextImpl'*.patch)
  90. +}
  91. +
  92. +patch_matcher () {
  93. +     FAILED_FILE=${FAILED_PATCH##*/}     # strip path from file
  94. +     MATCHED_FILE=${FAILED_FILE##*_}     # strip headers from file name (e.g.returns 'SipPhone.patch')
  95. +     POSSIBLE_MATCHES=$( find patches/$P/$ANDR -name "*$MATCHED_FILE*" )
  96. +
  97. +     # Somewhere here we need to test for empty and test for too large (100?) #TODO IMPORTANT!
  98. +
  99. +     # MATCH_SUCCESS is solely used to provide a fail message to log. Is there another way?
  100. +     MATCH_SUCCESS=false
  101. +     for p in $POSSIBLE_MATCHES; do
  102. +          rm -rf ${JAR}.log # needs to be cleared (AND moved to a useful function)
  103. +               if ($PATCH_BINARY --dry-run -Nls -p1 -d tmp/${FILE}.out < $p 2>&1 >> ${JAR}.log ); then
  104. +                    # This below is temporary debug logging.
  105. +                    print_to_log "Succesful match found! Swapping $FAILED_PATCH for $p!!"
  106. +                    PATCH_QUEUE=( ${PATCH_QUEUE[@]//$FAILED_PATCH} )
  107. +                    PATCH_QUEUE+=( "$p" )
  108. +                    FAILED_PATCH_QUEUE=( ${FAILED_PATCH_QUEUE[@]//$FAILED_PATCH} )
  109. +                    MATCH_SUCCESS=true
  110. +                    break
  111. +               fi
  112. +     done
  113. +     [ $MATCH_SUCCESS == true ] || print_to_log "We did not find a working patch for $p...looking for other solutions!"                      
  114. +}
  115. +
  116.       for (( current_jar=0; current_jar < ${#JARS[@]}; current_jar++)); do
  117.            FILE=${JARS[$current_jar]}
  118.            JAR=${FILE##*/}
  119.            if [[ $FILE == *".jar" ]]; then # allows for *.apks to be decompiled by baksmali
  120.                 NAME=${JAR%.jar}
  121.            else
  122. -               # check for abscense of any apks decompiled by baksmali (~* in files.txt). Missing jars will still error
  123. +          # check for abscense of any apks decompiled by baksmali (~* in files.txt). Missing jar will still error
  124.                 if [ ! -d "tmp/${FILE}.out" ] ; then
  125.                      echo "No $JAR in your ROM. Not able to patch this file."
  126.                      echo "## No $JAR in ROM ###" >> "$LOG"
  127. @@ -1744,52 +1799,66 @@ for ((i=0; i < ${#PID[@]}; i++)); do
  128.                 fi
  129.                 NAME=$JAR # TODO: Maybe rename this, since it now encompases apks at times
  130.            fi
  131. +          
  132.            printtask "... apply $NAME.patch ..."
  133. -                    # use globbing for the whole bit.
  134. -               echo "name is $NAME" #debug
  135. -               echo "full jar_patches is patches{/$P/$A/$R/$B/$NAME}"
  136. -               declare -a JAR_PATCH=("patches/$P/$A/$R/$B/$NAME"_*patch)
  137. -               echo "JAR_PATCH is ${JAR_PATCH[@]}" #debug
  138. -               [ -f "patches/$P/$A/$R/$B/$NAME"-* ] && echo "DEBUGBUDEBUDE" && declare -a INCREMENTAL="patches/$P/$A/$R/$B/$NAME"-*
  139. -               echo "incremental is ${INCREMENTAL[@]}"
  140. -               declare -a FAILED_PATCH_QUEUE
  141. -               declare -a PATCH_QUEUE=(${JAR_PATCH[@]} ${INCREMENTAL[@]})
  142. -               # add preloaded to PATCH_QUEUE ### I think we can rename to framework_preloaded.patch
  143. -               for ((k=0;k < ${#PATCH_QUEUE[@]}; k++)) do
  144. -                    echo "DEBUG *** Applying ${PATCH_QUEUE[$k]} ***"
  145. -                    # let's use dry-run until we build a completely succesful patch queue.
  146. -                    $PATCH_BINARY --dry-run -Nls -p1 -d tmp/${FILE}.out < ${PATCH_QUEUE[$k]} #2>&1 >> ${JAR}.log || FAILED_PATCH_QUEUE=( ${FAILED_PATCH_QUEUE[@]/$PATCH_QUEUE[$k]/} )
  147. -                    echo "DEBUG *** ${FAILED_PATCH_QUEUE[@]}"
  148. -               done
  149. -                    # Lets note, FAILS is the name of the patch's name + target, so match from the patch.
  150. -                    # unset FAILS # still needed? Test
  151. -                    # also need to test if FAILS is set to usable output after changes.
  152. -               FAILS=($(grep FAILED ${JAR}.log | sed -e 's/.*smali\///' | sed -e 's/\.rej//'))
  153. -               for ff in ${FAILS[@]}; do echo $ff; done # debug
  154. -               # patch_matcher needs to determine which unique string is in the failed patch
  155. +
  156. +          # In a test, this failed when retitled framework_00_preloaded.patch and added to QUEUE. But why?
  157. +          if ( [[ "$NAME" == "framework" ]] && [ -f $PARB/preloaded.patch ] ); then
  158. +                    printtask "... apply preloaded.patch ..."
  159. +                    $PATCH_BINARY -Nls -p1 -d tmp/${FILE}.out < $PARB/preloaded.patch 2>&1 > preloaded.log
  160. +                    [[ $(grep FAILED preloaded.log) != "" ]] && print_error "failed preloaded.patch"
  161. +          fi
  162. +
  163. +
  164. +          declare -a PATCH_QUEUE=("patches/$P/$A/$R/$B/$NAME"_*patch)
  165. +          [ -f "patches/$P/$A/$R/$B/$NAME"-* ] && declare -a INCREMENTAL=( "patches/$P/$A/$R/$B/$NAME"-* )
  166. +          declare -a FAILED_PATCH_QUEUE
  167. +          rm -rf {JAR}.log # Needed since we append the patch output now
  168. +
  169. +          for ((k=0;k < ${#PATCH_QUEUE[@]}; k++)) do
  170. +               # dry-run until we build a completely succesful patch queue. Add $k to FAILED upon failure
  171. +               $PATCH_BINARY --dry-run -Nls -p1 -d tmp/${FILE}.out < ${PATCH_QUEUE[$k]} 2>&1 >> ${JAR}.log || FAILED_PATCH_QUEUE+=( ${PATCH_QUEUE[$k]} )
  172. +          done
  173. +
  174. +          FAILS=($(grep FAILED ${JAR}.log | sed -e 's/.*smali\///' | sed -e 's/\.rej//'))          
  175. +          [[ -n ${FAILED_PATCH_QUEUE[@]} ]] && [[ "$NAME" == "framework" ]] && context_editor
  176. +          for FAILED_PATCH in ${FAILED_PATCH_QUEUE[@]}; do
  177. +              patch_matcher
  178. +          done
  179. +          if [[ -n ${FAILED_PATCH_QUEUE[@]} ]]; then # while ?
  180.                 for FAILED_PATCH in ${FAILED_PATCH_QUEUE[@]}; do
  181. -                    patch_matcher || printerror "No patches for $FAILED_PATCH! Please upload the autopatcher log and a link to your rom!"
  182. -               done
  183. -               ALT_PATCH_NUMBER=2
  184. -               if [[ -n ${FAILED_PATCH_QUEUE[@]} ]]; then
  185. -                    for FAILED_PATCH in ${FAILED_PATCH_QUEUE[@]}; do
  186. -                         PROVISIONAL="patches/$P/$ANDR/.provisionals/${FILE}.out/smali/${FAILED_PATCH}"
  187. -                         ALTERNATIVE_PATCH=$(ls $PARB/${NAME}*.patch$ALT_PATCH_NUMBER 2>/dev/null)
  188. -                         if [ ! -f "$PROVISIONAL" ]; then
  189. -                              if [ -f "$ALTERNATIVE_PATCH" ]; then
  190. -                                   printtask "## trying alternative ${NAME} patch #$ALT_PATCH_NUMBER ###"
  191. -                                   prep_alternate_patch
  192. -                              else
  193. -                                  print_error "failed $FAILED_PATCH in $JAR cannot be remedied"
  194. -                              fi
  195. -                         else
  196. -                              echo "!!! patch error for $FAILED_PATCH !!!" >> "$LOG"
  197. -                              [[ ${SID[@]} =~ $FAILED_PATCH ]] && print_error "$FAILED_PATCH was already replaced before"
  198. -                              copy_prepatched_provisional
  199. -                         fi
  200. +               # Mostly unartful workarounds so we can manipulate either the patch in FAIL or the FILE
  201. +
  202. +                    FAILED_FILE=${FAILED_PATCH##*/}            #strip path from file
  203. +                    MATCHED_FILE=${FAILED_FILE##*_}            #strip headers from file name
  204. +
  205. +                    # MATCH_PATTERN includes period (e.g. 'FILE.') to avoid globbing extra files (e.g.FILE$2)
  206. +                    MATCH_PATTERN=${MATCHED_FILE%patch}
  207. +
  208. +                    for ITEM in ${FAILS[@]}; do
  209. +                         [[ "$ITEM" =~ "${MATCH_PATTERN}" ]] && FAIL=$ITEM && break
  210.                      done
  211. -               fi
  212. -               rm -rf ${JAR}.log # needs to be cleared!
  213. +
  214. +                    PROVISIONAL="patches/$P/$ANDR/.provisionals/${FILE}.out/smali/${FAIL}"
  215. +                    if [ ! -f "$PROVISIONAL" ]; then
  216. +                         print_error $MATCH_PATTERN"patch in $JAR cannot be remedied"
  217. +                    else
  218. +                         print_to_log "!!! patch error for $FAIL !!!"
  219. +                         [[ ${SID[@]} =~ $MATCHED_FILE ]] && print_error "$MATCHED_FILE was already replaced before"
  220. +                         copy_prepatched_provisional
  221. +                         patch_matcher
  222. +  # this includes the period (e.g. 'Instrumentation.') so it does not pick up extra files (e.g. Instrumentation$2
  223. +                    fi
  224. +               done
  225. +          fi
  226. +          rm -rf ${JAR}.log # needs to be cleared and for the same reason as above
  227. +
  228. +          # Actual application of patches occurs here!
  229. +          for ((k=0;k < ${#PATCH_QUEUE[@]}; k++)) do
  230. +               print_to_log " ...applying ${PATCH_QUEUE[$k]} ..."
  231. +               $PATCH_BINARY -Nls -p1 -d tmp/${FILE}.out < ${PATCH_QUEUE[$k]} 2>&1 >> ${JAR}.log
  232. +          done
  233. +          # Incremental--use patch_matcher? (how, b/c dry-run...should INCREMENTAL be optional (or fail-possible?
  234.            [[ $(grep FAILED ${JAR}.log) != "" ]] &&  print_error "failed $NAME.patch"
  235.            garbage tmp/${FILE}.out
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement