my_migrate.sh 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. #!/bin/sh
  2. MyDir=${0%/*}
  3. LogFile="$MyDir/migrate.log"
  4. #exec 3>&1 4>&2 2>$LogFile 1>&2
  5. #set -x
  6. case "$1" in
  7. -h|--help|help) echo "sh migrate.sh [-i] [-f] [-o] [-a] [in-file] [out-file]"; exit 0;;
  8. esac;
  9. N="
  10. ";
  11. case "$1" in
  12. -i|--install|install) INSTALL=1; shift;;
  13. *) echo "custom.pif.json migration script \
  14. $N by osm0sis @ xda-developers $N";;
  15. esac;
  16. item() { echo "- $@"; }
  17. die() { echo "$N$N! $@"; exit 1; }
  18. grep_get_json() { eval set -- "$(cat "$FILE" | tr -d '\r\n' | grep -m1 -o "\"$1\""'.*' | cut -d: -f2-)"; echo "$1" | sed -e 's|"|\\\\\\"|g' -e 's|[,}]*$||'; }
  19. grep_check_json() { grep -q "$1" "$FILE" && [ "$(grep_get_json $1)" ]; }
  20. case "$1" in
  21. -f|--force|force) FORCE=1; shift;;
  22. esac;
  23. case "$1" in
  24. -o|--override|override) OVERRIDE=1; shift;;
  25. esac;
  26. case "$1" in
  27. -a|--advanced|advanced) ADVANCED=1; shift;;
  28. esac;
  29. if [ -f "$1" ]; then
  30. FILE="$1";
  31. DIR="$1";
  32. else
  33. case "$0" in
  34. *.sh) DIR="$0";;
  35. *) DIR="$(lsof -p $$ 2>/dev/null | grep -o '/.*migrate.sh$')";;
  36. esac;
  37. fi;
  38. DIR=$(dirname "$(readlink -f "$DIR")");
  39. [ -z "$FILE" ] && FILE="$DIR/custom.pif.json";
  40. OUT="$2";
  41. [ -z "$OUT" ] && OUT="$DIR/custom.pif.json";
  42. [ -f "$FILE" ] || die "No json file found";
  43. grep_check_json api_level && [ ! "$FORCE" ] && die "No migration required";
  44. [ "$INSTALL" ] || item "Parsing fields ...";
  45. FPFIELDS="BRAND PRODUCT DEVICE RELEASE ID INCREMENTAL TYPE TAGS";
  46. ALLFIELDS="MANUFACTURER MODEL FINGERPRINT $FPFIELDS SECURITY_PATCH DEVICE_INITIAL_SDK_INT";
  47. MYFIELDS="$ALLFIELDS _ORIGINAL_FIRST_API_LEVEL _DUMP_SOURCE _COMMENT verboseLogs";
  48. for FIELD in $MYFIELDS; do
  49. eval $FIELD=\"$(grep_get_json $FIELD)\";
  50. done;
  51. if [ -n "$ID" ] && ! grep_check_json build.id; then
  52. item 'Simple entry ID found, changing to ID field and "*.build.id" property ...';
  53. fi;
  54. if [ -z "$ID" ] && grep_check_json BUILD_ID; then
  55. item 'Deprecated entry BUILD_ID found, changing to ID field and "*.build.id" property ...';
  56. ID="$(grep_get_json BUILD_ID)";
  57. fi;
  58. if [ -n "$SECURITY_PATCH" ] && ! grep_check_json security_patch; then
  59. item 'Simple entry SECURITY_PATCH found, changing to SECURITY_PATCH field and "*.security_patch" property ...';
  60. fi;
  61. if grep_check_json VNDK_VERSION; then
  62. item 'Deprecated entry VNDK_VERSION found, changing to "*.vndk.version" property ...';
  63. VNDK_VERSION="$(grep_get_json VNDK_VERSION)";
  64. fi;
  65. if [ -n "$DEVICE_INITIAL_SDK_INT" ] && ! grep_check_json api_level; then
  66. item 'Simple entry DEVICE_INITIAL_SDK_INT found, changing to DEVICE_INITIAL_SDK_INT field and "*api_level" property ...';
  67. fi;
  68. if [ -z "$DEVICE_INITIAL_SDK_INT" ] && grep_check_json FIRST_API_LEVEL; then
  69. item 'Deprecated entry FIRST_API_LEVEL found, changing to DEVICE_INITIAL_SDK_INT field and "*api_level" property ...';
  70. DEVICE_INITIAL_SDK_INT="$(grep_get_json FIRST_API_LEVEL)";
  71. fi;
  72. if [ -z "$DEVICE_INITIAL_SDK_INT" ] && grep_check_json ignore-FIRST_API_LEVEL; then
  73. item 'Deprecated entry FIRST_API_LEVEL found, changing to DEVICE_INITIAL_SDK_INT field and "*api_level" property ...';
  74. DEVICE_INITIAL_SDK_INT="$(grep_get_json ignore-FIRST_API_LEVEL)";
  75. fi;
  76. if [ -z "$RELEASE" -o -z "$INCREMENTAL" -o -z "$TYPE" -o -z "$TAGS" -o "$OVERRIDE" ]; then
  77. if [ "$OVERRIDE" ]; then
  78. item "Overriding values for fields derivable from FINGERPRINT ...";
  79. else
  80. item "Missing default fields found, deriving from FINGERPRINT ...";
  81. fi;
  82. IFS='/:' read F1 F2 F3 F4 F5 F6 F7 F8 <<EOF
  83. $(grep_get_json FINGERPRINT)
  84. EOF
  85. i=1;
  86. for FIELD in $FPFIELDS; do
  87. eval [ -z \"\$$FIELD\" -o \"$OVERRIDE\" ] \&\& $FIELD=\"\$F$i\";
  88. i=$((i+1));
  89. done;
  90. fi;
  91. if [ -z "$SECURITY_PATCH" -o "$SECURITY_PATCH" = "null" ]; then
  92. item 'Missing required SECURITY_PATCH field and "*.security_patch" property value found, leaving empty ...';
  93. unset SECURITY_PATCH;
  94. fi;
  95. if [ -z "$DEVICE_INITIAL_SDK_INT" -o "$DEVICE_INITIAL_SDK_INT" = "null" ]; then
  96. item 'Missing required DEVICE_INITIAL_SDK_INT field and "*api_level" property value found, setting to 25 ...';
  97. DEVICE_INITIAL_SDK_INT=25;
  98. fi;
  99. if [ -z "$verboseLogs" ]; then
  100. item 'Setting verboseLogs to 4 ...';
  101. verboseLogs=4;
  102. fi;
  103. if [ -f "$OUT" ]; then
  104. [ "$INSTALL" ] || item "Renaming old file to $(basename "$OUT").bak ...";
  105. mv -f "$OUT" "$OUT.bak";
  106. grep -qE "verboseLogs|VERBOSE_LOGS" "$OUT.bak" && ADVANCED=1;
  107. fi;
  108. [ "$INSTALL" ] || item "Writing fields and properties to updated custom.pif.json ...";
  109. (echo "{";
  110. echo " // Build Fields";
  111. for FIELD in $ALLFIELDS; do
  112. eval echo '\ \ \ \ \"$FIELD\": \"'\$$FIELD'\",';
  113. done;
  114. echo "$N // System Properties";
  115. echo ' "*.build.id": "'$ID'",';
  116. echo ' "*.security_patch": "'$SECURITY_PATCH'",';
  117. [ -z "$VNDK_VERSION" ] || echo ' "*.vndk.version": "'$VNDK_VERSION'",';
  118. echo ' "*api_level": "'$DEVICE_INITIAL_SDK_INT'",';
  119. if [ "$ADVANCED" ]; then
  120. echo "$N // Additional fields";
  121. [ -z "$_ORIGINAL_FIRST_API_LEVEL" ] || echo ' "_ORIGINAL_FIRST_API_LEVEL": "'$_ORIGINAL_FIRST_API_LEVEL'",';
  122. [ -z "$_DUMP_SOURCE" ] || echo ' "_DUMP_SOURCE": "'$_DUMP_SOURCE'",';
  123. [ -z "$_COMMENT" ] || echo ' "_COMMENT": "'$_COMMENT'",';
  124. [ -z "$verboseLogs" ] || echo ' "verboseLogs": "'$verboseLogs'",';
  125. fi) | sed '$s/,/\n}/' > "$OUT";
  126. [ "$INSTALL" ] || cat "$OUT";
  127. #set +x
  128. #exec 1>&3 2>&4 3>&- 4>&-