Bläddra i källkod

Better subtree scripts (#25)

* Replace local subtree cache with git log checks

* Nevermind, use git's subtree split --rejoin method

* Make notifications temporary again

* Revert "Nevermind, use git's subtree split --rejoin method"

This reverts commit a96e8734ec75c95a980214fdebfc6f201a82afcf.

* Add commit hashes of upstream before split

* Rewrite subtree scripts in python

* Use cached commit hash from gitsubtree file

* Save new cached hash when updating/adding subtrees

* Add back notifications

* Commit amend after new cache is added

* Add missing cache commits

* Sort subtrees when updating

* Fix gitignore
WillyJL 1 år sedan
förälder
incheckning
1864a26b28
100 ändrade filer med 418 tillägg och 316 borttagningar
  1. 1 1
      .gitignore
  2. 89 0
      .subtrees/add.py
  3. 154 0
      .subtrees/common.py
  4. 59 0
      .subtrees/update.py
  5. 0 29
      .utils/.check-merge.sh
  6. 0 15
      .utils/.check-workdir.sh
  7. 0 63
      .utils/.subtree-subdir-helper.sh
  8. 0 60
      .utils/add-subtree.sh
  9. 0 33
      .utils/update-subtrees.sh
  10. 1 1
      2048/.gitsubtree
  11. 1 1
      4inrow/.gitsubtree
  12. 5 5
      README.md
  13. 2 2
      air_arkanoid/.gitsubtree
  14. 2 2
      air_labyrinth/.gitsubtree
  15. 1 1
      airmouse/.gitsubtree
  16. 1 1
      arkanoid/.gitsubtree
  17. 1 1
      asteroids/.gitsubtree
  18. 2 2
      atomicdiceroller/.gitsubtree
  19. 2 2
      avr_isp/.gitsubtree
  20. 1 1
      barcode_gen/.gitsubtree
  21. 1 1
      blackjack/.gitsubtree
  22. 1 1
      bomberduck/.gitsubtree
  23. 1 1
      bpmtapper/.gitsubtree
  24. 1 1
      bt_trigger/.gitsubtree
  25. 1 1
      caesarcipher/.gitsubtree
  26. 1 1
      calculator/.gitsubtree
  27. 2 2
      camera_suite/.gitsubtree
  28. 1 1
      chess/.gitsubtree
  29. 1 1
      cli_bridge/.gitsubtree
  30. 1 1
      cntdown_timer/.gitsubtree
  31. 1 1
      color_guess/.gitsubtree
  32. 1 1
      counter/.gitsubtree
  33. 2 2
      dap_link/.gitsubtree
  34. 1 1
      doom/.gitsubtree
  35. 1 1
      dtmf_dolphin/.gitsubtree
  36. 1 1
      em4100_generator/.gitsubtree
  37. 1 1
      esp8266_deauth/.gitsubtree
  38. 1 1
      esp_flasher/.gitsubtree
  39. 1 1
      esubghz_chat/.gitsubtree
  40. 2 2
      etch_a_sketch/.gitsubtree
  41. 1 1
      ethernet/.gitsubtree
  42. 2 2
      evil_portal/.gitsubtree
  43. 1 1
      flappy_bird/.gitsubtree
  44. 1 1
      flashlight/.gitsubtree
  45. 1 1
      flipbip/.gitsubtree
  46. 1 1
      flizzer_tracker/.gitsubtree
  47. 2 2
      fmf_to_sub/.gitsubtree
  48. 1 1
      game15/.gitsubtree
  49. 1 1
      game_of_life/.gitsubtree
  50. 2 2
      geiger/.gitsubtree
  51. 1 1
      gpio_badge/.gitsubtree
  52. 1 1
      gpio_controller/.gitsubtree
  53. 1 1
      gpio_reader_a/.gitsubtree
  54. 1 1
      gpio_reader_b/.gitsubtree
  55. 1 1
      gps_nmea/.gitsubtree
  56. 1 1
      hc_sr04/.gitsubtree
  57. 1 1
      heap_defence/.gitsubtree
  58. 1 1
      hex_editor/.gitsubtree
  59. 1 1
      hex_viewer/.gitsubtree
  60. 1 1
      i2ctools/.gitsubtree
  61. 2 2
      ifttt/.gitsubtree
  62. 1 1
      ir_intervalometer/.gitsubtree
  63. 1 1
      ir_remote/.gitsubtree
  64. 1 1
      ir_scope/.gitsubtree
  65. 1 1
      jetpack_joyride/.gitsubtree
  66. 1 1
      key_copier/.gitsubtree
  67. 2 2
      lightmeter/.gitsubtree
  68. 1 1
      magspoof/.gitsubtree
  69. 1 1
      malveke_gb_cartridge/.gitsubtree
  70. 1 1
      malveke_gb_emulator/.gitsubtree
  71. 1 1
      malveke_gb_link_camera/.gitsubtree
  72. 1 1
      malveke_gb_live_camera/.gitsubtree
  73. 1 1
      malveke_gb_photo/.gitsubtree
  74. 1 1
      malveke_gba_cartridge/.gitsubtree
  75. 1 1
      malveke_pin_test/.gitsubtree
  76. 2 2
      mass_storage/.gitsubtree
  77. 1 1
      mayhem_camera/.gitsubtree
  78. 1 1
      mayhem_marauder/.gitsubtree
  79. 1 1
      mayhem_morseflash/.gitsubtree
  80. 1 1
      mayhem_motion/.gitsubtree
  81. 1 1
      mayhem_nannycam/.gitsubtree
  82. 1 1
      mayhem_qrcode/.gitsubtree
  83. 1 1
      meal_pager/.gitsubtree
  84. 1 1
      metronome/.gitsubtree
  85. 2 2
      mfc_editor/.gitsubtree
  86. 3 3
      mfkey/.gitsubtree
  87. 1 1
      mifare_fuzzer/.gitsubtree
  88. 1 1
      minesweeper/.gitsubtree
  89. 1 1
      morse_code/.gitsubtree
  90. 1 1
      multi_converter/.gitsubtree
  91. 2 2
      music_player/.gitsubtree
  92. 2 2
      nfc_magic/.gitsubtree
  93. 1 1
      nfc_playlist/.gitsubtree
  94. 2 2
      nfc_rfid_detector/.gitsubtree
  95. 1 1
      nightstand_clock/.gitsubtree
  96. 1 1
      nrf24batch/.gitsubtree
  97. 2 2
      nrf24channelscanner/.gitsubtree
  98. 1 1
      nrf24mousejacker/.gitsubtree
  99. 1 1
      nrf24scan/.gitsubtree
  100. 1 1
      nrf24sniff/.gitsubtree

+ 1 - 1
.gitignore

@@ -1,3 +1,3 @@
 /.vscode/
 /venv/
-.subtree-cache/
+__pycache__/

+ 89 - 0
.subtrees/add.py

@@ -0,0 +1,89 @@
+#!/usr/bin/env python3
+import tempfile
+import pathlib
+import shutil
+import sys
+import re
+
+import common
+
+
+def print_usage_and_exit():
+    print("Usage 1: <path> <repo url> <branch> [subdir]")
+    print("Usage 2: <path> <repo url>/tree/<branch>[/subdir]")
+    sys.exit(1)
+
+
+if __name__ == "__main__":
+    common.check_workdir_state()
+
+    if len(sys.argv) < 3 or not sys.argv[1] or not sys.argv[2]:
+        print_usage_and_exit()
+
+    if len(sys.argv) == 3 and "/tree/" not in sys.argv[2]:
+        print_usage_and_exit()
+
+    path = sys.argv[1]
+    repo = sys.argv[2].strip("/")
+    if len(sys.argv) == 3:
+        res = re.match(r"(https?://[^/]+/[^/]+/[^/]+)/tree/([^/]+)/?(.*)", repo)
+        if not res:
+            print(f"Could not parse repo URL: {repo}")
+            sys.exit(1)
+        repo = res.group(1)
+        branch = res.group(2)
+        subdir = res.group(3).strip("/")
+    else:
+        branch = sys.argv[3]
+        if len(sys.argv) > 4:
+            subdir = sys.argv[4].strip("/")
+        else:
+            subdir = ""
+    gitsubtree = common.REPO_ROOT / path / ".gitsubtree"
+
+    prevremotedir = None
+    if gitsubtree.is_file():
+        print("Subtree already exists, adding new remote to it.")
+        prevremotedir = pathlib.Path(tempfile.mkdtemp(prefix="gitsubtree"))
+        # To use 2 remotes for subtree we need to remove current one, add new one, then merge
+        shutil.move(path, prevremotedir / path)
+        common.git("add", path)
+        common.git("commit", "-m", f"Add new remote for {path}")
+
+    if subdir == "":
+        subdir = "/"
+        common.git(
+            "subtree",
+            "add",
+            "-P",
+            path,
+            repo,
+            branch,
+            "-m",
+            f"Add {path} from {repo}",
+        )
+        commit = None
+    else:
+        commit = common.subdir_split_helper(path, repo, branch, subdir, "add")
+
+    if prevremotedir:
+        shutil.rmtree(path)
+        shutil.move(prevremotedir / path, path)
+        prevremotedir.rmdir()
+
+    line = f"{repo} {branch} {subdir}" + (f" {commit}" if commit else "")
+    if gitsubtree.is_file():
+        # Add new remote at the top
+        lines = gitsubtree.read_text().splitlines()
+        lines.insert(0, line)
+    else:
+        lines = [line]
+    gitsubtree.write_text("\n".join(lines) + "\n")
+    common.git("add", str(gitsubtree.relative_to(common.REPO_ROOT)))
+    common.git("commit", "--amend", "--no-edit")
+
+    if prevremotedir:
+        prevremotedir = None
+        print(
+            "Added new remote for existing subtree, you must resolve conflicts manually..."
+        )

+ 154 - 0
.subtrees/common.py

@@ -0,0 +1,154 @@
+import subprocess
+import pathlib
+import time
+import sys
+
+REPO_ROOT = pathlib.Path(__file__).parent.parent
+
+
+def git(*args, pipe=False, tee=False):
+    if tee:
+        result = b""
+        line = b""
+        with subprocess.Popen(
+            ["git", *args],
+            stdout=subprocess.PIPE,
+            stderr=subprocess.STDOUT,
+            bufsize=0,
+        ) as proc:
+            cr = False
+            while True:
+                char = proc.stdout.read(1)
+                if not char:
+                    result += line
+                    break
+                sys.stdout.write(char.decode())
+                # Simulate terminal line buffering, where \r resets to start of line overwriting what is already there
+                # unless \n follows it, which is just going to next line keeping the content on previous one
+                # Useful for terminal progress bars/numbers, no need to log all this data as separate lines
+                if char == b"\r":
+                    cr = True
+                    continue
+                elif cr:
+                    cr = False
+                    if char != b"\n":
+                        line = b""
+                line += char
+                if char == b"\n":
+                    result += line
+                    line = b""
+        return result.decode().removesuffix("\n"), proc.returncode
+
+    elif pipe:
+        return subprocess.check_output(["git", *args], text=True).removesuffix("\n")
+
+    else:
+        return subprocess.check_call(["git", *args])
+
+
+def is_workdir_clean():
+    try:
+        git("diff", "--quiet")
+        git("diff", "--cached", "--quiet")
+        git("merge", "HEAD", pipe=True)
+        return True
+    except subprocess.CalledProcessError:
+        return False
+
+
+def send_alert(title, message):
+    try:
+        subprocess.run(
+            ["notify-send", "-a", "Git", "-i", "git", title, message],
+            stdout=subprocess.PIPE,
+            stderr=subprocess.PIPE,
+        )
+    except Exception:
+        pass
+
+
+def check_merge_result(path, repo, result, status):
+    if "Automatic merge failed; fix conflicts and then commit the result." in result:
+        print(f"MERGE_MSG: Merge {path} from {repo}")
+        send_alert("Subtree merge failed", "Resolve current index to continue")
+        while True:
+            input("Resolve current index then press Enter...")
+            if is_workdir_clean():
+                break
+            time.sleep(1)
+
+    elif (
+        "Please commit your changes or stash them before you switch branches." in result
+    ):
+        sys.exit(1)
+
+    elif "fatal: " in result:
+        sys.exit(1)
+
+    elif status != 0:
+        print(f"Git returned status: {status}")
+        sys.exit(1)
+
+
+def check_workdir_state():
+    if git("rev-parse", "--show-prefix", pipe=True) != "":
+        print("Must be in root of git repo!")
+        sys.exit(1)
+
+    if git("branch", "--show-current", pipe=True) == "":
+        print("Must be on a branch!")
+        sys.exit(1)
+
+    if not is_workdir_clean():
+        print("Workdir must be clean!")
+        sys.exit(1)
+
+
+def subdir_split_helper(path, repo, branch, subdir, action, cached=None):
+    check_workdir_state()
+
+    prevbranch = git("branch", "--show-current", pipe=True)
+    temp = "/".join(repo.split("/")[-2:] + [branch]).replace("/", "-")
+    fetch = f"_fetch-{temp}"
+    split = f"_split-{temp}-{subdir.replace('/', '-')}"
+    git("fetch", "--no-tags", repo, f"{branch}:{fetch}")
+
+    current = git("rev-parse", fetch, pipe=True)
+    skip = False
+    if cached:
+        try:
+            git("diff", "--quiet", cached, current, "--", subdir)
+            skip = True
+        except subprocess.CalledProcessError:
+            pass
+    if skip:
+        print("No updates, skipping expensive subtree split.")
+        return
+
+    ok = True
+    git("checkout", fetch)
+    result, status = git("subtree", "split", "-P", subdir, "-b", split, tee=True)
+    if "is not an ancestor of commit" in result:
+        print("Resetting split branch...")
+        git("branch", "-D", split)
+        git("subtree", "split", "-P", subdir, "-b", split)
+    if "fatal: " in result:
+        ok = False
+    git("checkout", prevbranch)
+    if ok:
+        prevhead = git("rev-parse", "HEAD", pipe=True)
+        result, status = git(
+            "subtree",
+            action,
+            "-P",
+            path,
+            split,
+            "-m",
+            f"{action.title()} {path} from {repo}",
+            tee=True,
+        )
+        check_merge_result(path, repo, result, status)
+        if git("rev-parse", "HEAD", pipe=True) != prevhead:
+            # Only return new upstream hash if subtree was updated
+            # Not if merge was aborted or nothing to update
+            return current

+ 59 - 0
.subtrees/update.py

@@ -0,0 +1,59 @@
+#!/usr/bin/env python3
+import pathlib
+import sys
+
+import common
+
+
+if __name__ == "__main__":
+    common.check_workdir_state()
+
+    if len(sys.argv) > 1:
+        subtrees = sys.argv[1:]
+    else:
+        subtrees = sorted(list(common.REPO_ROOT.glob("**/.gitsubtree")))
+
+    for subtree in subtrees:
+        if not isinstance(subtree, pathlib.Path):
+            if not subtree.endswith("/.gitsubtree"):
+                subtree += "/.gitsubtree"
+            subtree = common.REPO_ROOT / subtree
+        path = str(subtree.parent.relative_to(common.REPO_ROOT))
+        print(f"\n\nUpdating {path}...")
+
+        for remote in subtree.read_text().splitlines():
+            if remote.startswith("#"):
+                continue
+            params = remote.split(" ")
+            if len(params) == 4:
+                repo, branch, subdir, cached = params
+            else:
+                repo, branch, subdir = params
+            if subdir == "/":
+                result, status = common.git(
+                    "subtree",
+                    "pull",
+                    "-P",
+                    path,
+                    repo,
+                    branch,
+                    "-m",
+                    f"Merge {path} from {repo}",
+                    tee=True,
+                )
+                common.check_merge_result(path, repo, result, status)
+            else:
+                commit = common.subdir_split_helper(
+                    path, repo, branch, subdir, "merge", cached=cached
+                )
+                if commit:
+                    lines = subtree.read_text().splitlines()
+                    for i in range(len(lines)):
+                        if lines[i].startswith(repo):
+                            lines[i] = f"{repo} {branch} {subdir} {commit}"
+                            break
+                    subtree.write_text("\n".join(lines) + "\n")
+                    common.git("add", str(subtree.relative_to(common.REPO_ROOT)))
+                    common.git("commit", "--amend", "--no-edit")
+
+    common.send_alert("Subtree update finished", "Double check merge commits")

+ 0 - 29
.utils/.check-merge.sh

@@ -1,29 +0,0 @@
-#!/bin/bash
-set -e
-
-if [ "${1}" = "" ] || [ "${2}" = "" ]; then
-    echo "Usage: <path> <repo url> <merge output>"
-    exit
-fi
-path="${1}"
-repo="${2}"
-result="${3}"
-
-if grep "Automatic merge failed; fix conflicts and then commit the result." <<< "$result" > /dev/null; then
-    echo "MERGE_MSG: Merge ${path} from ${repo}"
-    notify-send -t 0 -a Git -i git "Subtree merge failed" "Resolve current index to continue" &> /dev/null | true
-    while true; do
-        echo "Resolve current index then press Enter..."
-        read
-        if git diff --quiet && git diff --cached --quiet && git merge HEAD &> /dev/null; then
-            break
-        fi
-        sleep 1
-    done
-fi
-if grep "Please commit your changes or stash them before you switch branches." <<< "$result" > /dev/null; then
-    exit 1
-fi
-if grep "^fatal: " <<< "$result" > /dev/null; then
-    exit 1
-fi

+ 0 - 15
.utils/.check-workdir.sh

@@ -1,15 +0,0 @@
-#!/bin/bash
-set -e
-
-if [ "$(git rev-parse --show-prefix)" != "" ]; then
-    echo "Must be in root of git repo!"
-    exit 1
-fi
-if [ "$(git branch --show-current)" = "" ]; then
-    echo "Must be on a branch!"
-    exit 1
-fi
-if ! git diff --quiet || ! git diff --cached --quiet || ! git merge HEAD &> /dev/null; then
-    echo "Workdir must be clean!"
-    exit 1
-fi

+ 0 - 63
.utils/.subtree-subdir-helper.sh

@@ -1,63 +0,0 @@
-#!/bin/bash
-set -e
-
-bash .utils/.check-workdir.sh
-
-if [ "${1}" = "" ] || [ "${2}" = "" ] || [ "${3}" = "" ] || [ "${4}" = "" ] || [ "${5}" = "" ]; then
-    echo "Usage: <path> <repo url> <branch> <subdir> <action>"
-    exit
-fi
-path="${1}"
-repo="${2}"
-branch="${3}"
-subdir="${4}"
-action="${5}"
-
-prevbranch="$(git branch --show-current)"
-temp="$(rev <<< "${repo%/}" | cut -d/ -f1,2 | rev | tr / -)-$(tr / - <<< "${branch}")"
-fetch="_fetch-${temp}"
-split="_split-${temp}-$(tr / - <<< "${subdir}")"
-git fetch --no-tags "${repo}" "${branch}:${fetch}"
-cache="${path}/.subtree-cache/${split}"
-hash="$(git rev-parse ${fetch})"
-skip=false
-if [ -f "${cache}" ]; then
-    if git diff --quiet "$(<${cache})" "${hash}" -- "${subdir}"; then
-        skip=true
-    fi
-fi
-ok=true
-if $skip; then
-    echo "No updates, skipping expensive subtree split."
-else
-    git checkout "${fetch}"
-    exec {capture}>&1
-    result="$(git subtree split -P "${subdir}" -b "${split}" 2>&1 | tee /proc/self/fd/$capture)"
-    if grep "is not an ancestor of commit" <<< "$result" > /dev/null; then
-        echo "Resetting split branch..."
-        git branch -D "${split}"
-        git subtree split -P "${subdir}" -b "${split}"
-    fi
-    if grep "^fatal: " <<< "$result" > /dev/null; then
-        ok=false
-    fi
-    git checkout "${prevbranch}"
-    if $ok; then
-        prevhead="$(git rev-parse HEAD)"
-        exec {capture}>&1
-        result="$(git subtree "${action}" -P "${path}" "${split}" -m "${action^} ${path} from ${repo}" 2>&1 | tee /proc/self/fd/$capture)"
-        cleanmerge=false
-        if git diff --quiet && git diff --cached --quiet && git merge HEAD &> /dev/null; then
-            cleanmerge=true
-        fi
-        bash .utils/.check-merge.sh "${path}" "${repo}" "${result}"
-        if [ "${prevhead}" = "$(git rev-parse HEAD)" ] && ! $cleanmerge; then
-            # Not a clean merge, and merge was aborted, don't save cache
-            ok=false
-        fi
-    fi
-fi
-if $ok; then
-    mkdir -p "${path}/.subtree-cache"
-    echo "${hash}" > "${cache}"
-fi

+ 0 - 60
.utils/add-subtree.sh

@@ -1,60 +0,0 @@
-#!/bin/bash
-set -e
-
-bash .utils/.check-workdir.sh
-
-if [ "$1" = "" ] || [ "$2" = "" ]; then
-    echo "Usage 1: <path> <repo url> <branch> [subdir]"
-    echo "Usage 2: <path> <repo url>/tree/<branch>[/subdir]"
-    exit
-fi
-path="${1%/}"
-repo="${2%/}"
-if [ "$3" = "" ]; then
-    read repo branch subdir <<< "$(sed -E "s|(https?://[^/]+)/([^/]+)/([^/]+)/(tree\|blob)/([^/]+)/?(.*)|\1/\2/\3 \5 \6|" <<< "${repo}")"
-else
-    branch="${3}"
-    subdir="${4%/}"
-fi
-gitsubtree="${path}/.gitsubtree"
-
-prevremotedir=""
-if [ -e "${gitsubtree}" ]; then
-    echo "Subtree already exists, adding new remote to it."
-    prevremotedir="$(mktemp -d /tmp/gitsubtree-XXXXXXXX)"
-    # To use 2 remotes for subtree we need to remove current one, add new one, then merge
-    mv -T "${path}" "${prevremotedir}"
-    git add "${path}"
-    git commit -m "Add new remote for ${path}"
-fi
-
-if [ "${subdir}" = "" ]; then
-    subdir="/"
-    git subtree add -P "${path}" "${repo}" "${branch}" -m "Add ${path} from ${repo}"
-else
-    bash .utils/.subtree-subdir-helper.sh "${path}" "${repo}" "${branch}" "${subdir}" add
-fi
-
-if [ "${prevremotedir}" != "" ]; then
-    if [ -e "${path}/.subtree-cache" ]; then
-        # Backup subtree cache
-        cp -rT "${path}/.subtree-cache" "${prevremotedir}/.subtree-cache"
-    fi
-    rm -r "${path}"
-    mv -T "${prevremotedir}" "${path}"
-fi
-
-if [ -e "${gitsubtree}" ]; then
-    # Add new remote at the top
-    echo "${repo} ${branch} ${subdir}" | cat - "${gitsubtree}" > "${gitsubtree}.new"
-    mv "${gitsubtree}.new" "${gitsubtree}"
-else
-    echo "${repo} ${branch} ${subdir}" > "${gitsubtree}"
-fi
-git add "${gitsubtree}"
-git commit --amend --no-edit
-
-if [ "${prevremotedir}" != "" ]; then
-    prevremotedir=""
-    echo "Added new remote for existing subtree, you must solve conflicts manually..."
-fi

+ 0 - 33
.utils/update-subtrees.sh

@@ -1,33 +0,0 @@
-#!/bin/bash
-set -e
-
-bash .utils/.check-workdir.sh
-
-if [ "${1}" = "" ]; then
-    shopt -s globstar
-    subtrees=(**/.gitsubtree)
-else
-    subtrees=($*)
-fi
-
-for subtree in "${subtrees[@]}"; do
-    if [[ "${subtree}" != */.gitsubtree ]]; then
-        subtree="${subtree}/.gitsubtree"
-    fi
-    path="$(dirname "${subtree}")"
-    echo -e "\n\nUpdating ${path}..."
-    while read -u $remote repo branch subdir; do
-        if [ "${repo:0:1}" = "#" ]; then
-            continue
-        fi
-        if [ "${subdir}" = "/" ]; then
-            exec {capture}>&1
-            result="$(git subtree pull -P "${path}" "${repo}" "${branch}" -m "Merge ${path} from ${repo}" 2>&1 | tee /proc/self/fd/$capture)"
-            bash .utils/.check-merge.sh "${path}" "${repo}" "${result}"
-        else
-            bash .utils/.subtree-subdir-helper.sh "${path}" "${repo}" "${branch}" "${subdir}" merge
-        fi
-    done {remote}< "${subtree}"
-done
-
-notify-send -t 0 -a Git -i git "Subtree update finished" "Double check merge commits" &> /dev/null | true

+ 1 - 1
2048/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/game_2048
+https://github.com/xMasterX/all-the-plugins dev base_pack/game_2048 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/eugene-kirzhanov/flipper-zero-2048-game main /

+ 1 - 1
4inrow/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev apps_source_code/4inrow_game
+https://github.com/xMasterX/all-the-plugins dev apps_source_code/4inrow_game 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/leo-need-more-coffee/flipperzero-4inrow main /

+ 5 - 5
README.md

@@ -26,13 +26,13 @@ We didn't want to have fork repos for each single app since it would get out of
 Subtrees work in a very peculiar way: they pull and compare commit history from a remote repo and apply it to a subdirectory of this repo.
 That's why the commit history for this repo is so huge, it contains all the commits for all the apps, plus our edits.
 
-To make updating more manageable, we have added some scripts on top of subtrees:
-- add a new app with `.utils/add-subtree.sh <path> <repo url> <branch> [subdir]`, this will pull the history and create `path/.gitsubtree` to remember the url, branch and subdir
-- run `.utils/update-subtrees.sh <path> [path2] [pathN...]` to pull updates for some subtrees
-- or run `.utils/update-subtrees.sh` with no arguments to update all subtrees
+To make updating more manageable, we have added some scripts on top of subtrees (requires [Python](https://python.org) installed to use):
+- add a new app with `.subtrees/add.py <path> <repo url> <branch> [subdir]`, this will pull the history and create `path/.gitsubtree` to remember the url, branch and subdir
+- run `.subtrees/update.py <path> [path2] [pathN...]` to pull updates for some subtrees
+- or run `.subtrees/update.py` with no arguments to update all subtrees
 
 Most apps have a remote subtree URL for both the original repository, and for any forks / other sources such as [@xMasterX's pack](https://github.com/xMasterX/all-the-plugins).
-This process is assisted by `.utils/add-subtree.sh`, if the specified subtree path already exists, it will:
+This process is assisted by `.subtrees/add.py`, if the specified subtree path already exists, it will:
 - remove the previous subtree with a commit
 - add the subtree from the new remote
 - restore the previous subtree and merge the remotes

+ 2 - 2
air_arkanoid/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/air_arkanoid
-https://github.com/flipperdevices/flipperzero-good-faps dev air_arkanoid
+https://github.com/xMasterX/all-the-plugins dev base_pack/air_arkanoid 4558d74c9da36abc851edd96a95d18f7d5511a75
+https://github.com/flipperdevices/flipperzero-good-faps dev air_arkanoid b791dea234f855155027bb46215dc60f3ddeb243

+ 2 - 2
air_labyrinth/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/air_labyrinth
-https://github.com/jamisonderek/flipper-zero-tutorials main vgm/apps/air_labyrinth
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/air_labyrinth 4558d74c9da36abc851edd96a95d18f7d5511a75
+https://github.com/jamisonderek/flipper-zero-tutorials main vgm/apps/air_labyrinth ae42dc8f84f211002f13d37f49526194e6b599d7

+ 1 - 1
airmouse/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/airmouse
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/airmouse 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/ginkage/FlippAirMouse/ main /

+ 1 - 1
arkanoid/.gitsubtree

@@ -1 +1 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/arkanoid
+https://github.com/xMasterX/all-the-plugins dev base_pack/arkanoid 4558d74c9da36abc851edd96a95d18f7d5511a75

+ 1 - 1
asteroids/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev apps_source_code/flipper-asteroids
+https://github.com/xMasterX/all-the-plugins dev apps_source_code/flipper-asteroids 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/SimplyMinimal/FlipperZero-Asteroids main /

+ 2 - 2
atomicdiceroller/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/flipper_atomicdiceroller
-https://github.com/nmrr/flipperzero-atomicdiceroller main flipper_atomicdiceroller
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/flipper_atomicdiceroller 4558d74c9da36abc851edd96a95d18f7d5511a75
+https://github.com/nmrr/flipperzero-atomicdiceroller main flipper_atomicdiceroller f222880d23ba031cfe8fc151d951415b315db995

+ 2 - 2
avr_isp/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/avr_isp_programmer
-https://github.com/flipperdevices/flipperzero-good-faps dev avr_isp_programmer
+https://github.com/xMasterX/all-the-plugins dev base_pack/avr_isp_programmer 4558d74c9da36abc851edd96a95d18f7d5511a75
+https://github.com/flipperdevices/flipperzero-good-faps dev avr_isp_programmer b791dea234f855155027bb46215dc60f3ddeb243

+ 1 - 1
barcode_gen/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/barcode_gen
+https://github.com/xMasterX/all-the-plugins dev base_pack/barcode_gen 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/Kingal1337/flipper-barcode-generator master /

+ 1 - 1
blackjack/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/blackjack
+https://github.com/xMasterX/all-the-plugins dev base_pack/blackjack 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/doofy-dev/flipper_blackjack main /

+ 1 - 1
bomberduck/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/bomberduck
+https://github.com/xMasterX/all-the-plugins dev base_pack/bomberduck 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/leo-need-more-coffee/flipperzero-bomberduck main /

+ 1 - 1
bpmtapper/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev apps_source_code/bpmtapper
+https://github.com/xMasterX/all-the-plugins dev apps_source_code/bpmtapper 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/ezod/flipperzero-bpm-tapper main /

+ 1 - 1
bt_trigger/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev apps_source_code/bluetooth-trigger
+https://github.com/xMasterX/all-the-plugins dev apps_source_code/bluetooth-trigger 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/Nem0oo/flipper-zero-bluetooth-trigger main /

+ 1 - 1
caesarcipher/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev apps_source_code/caesarcipher
+https://github.com/xMasterX/all-the-plugins dev apps_source_code/caesarcipher 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/panki27/caesar-cipher master /

+ 1 - 1
calculator/.gitsubtree

@@ -1 +1 @@
-https://github.com/xMasterX/all-the-plugins dev apps_source_code/calculator
+https://github.com/xMasterX/all-the-plugins dev apps_source_code/calculator 4558d74c9da36abc851edd96a95d18f7d5511a75

+ 2 - 2
camera_suite/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/camera_suite
-https://github.com/CodyTolene/Flipper-Zero-Camera-Suite main fap
+https://github.com/xMasterX/all-the-plugins dev base_pack/camera_suite 4558d74c9da36abc851edd96a95d18f7d5511a75
+https://github.com/CodyTolene/Flipper-Zero-Camera-Suite main fap 184f52a3283eb61b61eacd470424a8d7619f6922

+ 1 - 1
chess/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/chess
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/chess 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/xtruan/flipper-chess main /

+ 1 - 1
cli_bridge/.gitsubtree

@@ -1,2 +1,2 @@
 https://github.com/ranchordo/flipperzero-cli-bridge main /
-#https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/cli_bridge
+#https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/cli_bridge 4558d74c9da36abc851edd96a95d18f7d5511a75

+ 1 - 1
cntdown_timer/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev apps_source_code/fpz_cntdown_timer-main
+https://github.com/xMasterX/all-the-plugins dev apps_source_code/fpz_cntdown_timer-main 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/0w0mewo/fpz_cntdown_timer main /

+ 1 - 1
color_guess/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev apps_source_code/color_guess
+https://github.com/xMasterX/all-the-plugins dev apps_source_code/color_guess 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/leedave/flipper-zero-color-guess main /

+ 1 - 1
counter/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev apps_source_code/counter
+https://github.com/xMasterX/all-the-plugins dev apps_source_code/counter 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/Krulknul/dolphin-counter main /

+ 2 - 2
dap_link/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/dap_link
-https://github.com/flipperdevices/flipperzero-good-faps dev dap_link
+https://github.com/xMasterX/all-the-plugins dev base_pack/dap_link 4558d74c9da36abc851edd96a95d18f7d5511a75
+https://github.com/flipperdevices/flipperzero-good-faps dev dap_link b791dea234f855155027bb46215dc60f3ddeb243

+ 1 - 1
doom/.gitsubtree

@@ -1 +1 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/doom
+https://github.com/xMasterX/all-the-plugins dev base_pack/doom 4558d74c9da36abc851edd96a95d18f7d5511a75

+ 1 - 1
dtmf_dolphin/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/dtmf_dolphin
+https://github.com/xMasterX/all-the-plugins dev base_pack/dtmf_dolphin 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/litui/dtmf_dolphin main /

+ 1 - 1
em4100_generator/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev apps_source_code/fz-em4100-generator
+https://github.com/xMasterX/all-the-plugins dev apps_source_code/fz-em4100-generator 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/Milk-Cool/fz-em4100-generator main /

+ 1 - 1
esp8266_deauth/.gitsubtree

@@ -1 +1 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/esp8266_deauth
+https://github.com/xMasterX/all-the-plugins dev base_pack/esp8266_deauth 4558d74c9da36abc851edd96a95d18f7d5511a75

+ 1 - 1
esp_flasher/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/esp_flasher
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/esp_flasher 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/0xchocolate/flipperzero-esp-flasher main /

+ 1 - 1
esubghz_chat/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/esubghz_chat
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/esubghz_chat 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/twisted-pear/esubghz_chat main /

+ 2 - 2
etch_a_sketch/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/etch-a-sketch
-https://github.com/SimplyMinimal/FlipperZero-Etch-A-Sketch main etch-a-sketch
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/etch-a-sketch 4558d74c9da36abc851edd96a95d18f7d5511a75
+https://github.com/SimplyMinimal/FlipperZero-Etch-A-Sketch main etch-a-sketch c25b81c4c6d073625724cedb8ef38826403c10a8

+ 1 - 1
ethernet/.gitsubtree

@@ -1,3 +1,3 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/eth_troubleshooter
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/eth_troubleshooter 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/arag0re/fz-eth-troubleshooter master /
 https://github.com/karasevia/finik_eth main /

+ 2 - 2
evil_portal/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/flipper_evil_portal
-https://github.com/leedave/flipper-zero-evil-portal leedave/ap_rename flipper/flipper-evil-portal
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/flipper_evil_portal 4558d74c9da36abc851edd96a95d18f7d5511a75
+https://github.com/leedave/flipper-zero-evil-portal leedave/ap_rename flipper/flipper-evil-portal 735b84d6d24578551fe92d69657899350800db1a

+ 1 - 1
flappy_bird/.gitsubtree

@@ -1 +1 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/flappy_bird
+https://github.com/xMasterX/all-the-plugins dev base_pack/flappy_bird 4558d74c9da36abc851edd96a95d18f7d5511a75

+ 1 - 1
flashlight/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev apps_source_code/flipper-flashlight
+https://github.com/xMasterX/all-the-plugins dev apps_source_code/flipper-flashlight 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/xMasterX/flipper-flashlight main /

+ 1 - 1
flipbip/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/FlipBIP
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/FlipBIP 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/xtruan/FlipBIP main /

+ 1 - 1
flizzer_tracker/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/flizzer_tracker
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/flizzer_tracker 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/LTVA1/flizzer_tracker main /

+ 2 - 2
fmf_to_sub/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/fmf_to_sub
-https://github.com/jamisonderek/flipper-zero-tutorials main subghz/fmf_to_sub
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/fmf_to_sub 4558d74c9da36abc851edd96a95d18f7d5511a75
+https://github.com/jamisonderek/flipper-zero-tutorials main subghz/fmf_to_sub ae42dc8f84f211002f13d37f49526194e6b599d7

+ 1 - 1
game15/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/game15
+https://github.com/xMasterX/all-the-plugins dev base_pack/game15 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/x27/flipperzero-game15 main /

+ 1 - 1
game_of_life/.gitsubtree

@@ -1 +1 @@
-https://github.com/xMasterX/all-the-plugins dev apps_source_code/game_of_life
+https://github.com/xMasterX/all-the-plugins dev apps_source_code/game_of_life 4558d74c9da36abc851edd96a95d18f7d5511a75

+ 2 - 2
geiger/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev apps_source_code/flipper_geiger
-https://github.com/nmrr/flipperzero-geigercounter main flipper_geiger
+https://github.com/xMasterX/all-the-plugins dev apps_source_code/flipper_geiger 4558d74c9da36abc851edd96a95d18f7d5511a75
+https://github.com/nmrr/flipperzero-geigercounter main flipper_geiger 4940ce4fb01e0d539f6695dc7286492ca71407d0

+ 1 - 1
gpio_badge/.gitsubtree

@@ -1 +1 @@
-https://github.com/jamisonderek/flipper-zero-tutorials main gpio/gpio_badge
+https://github.com/jamisonderek/flipper-zero-tutorials main gpio/gpio_badge ae42dc8f84f211002f13d37f49526194e6b599d7

+ 1 - 1
gpio_controller/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/gpio_controller
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/gpio_controller 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/Lokno/gpio_controller main /

+ 1 - 1
gpio_reader_a/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev apps_source_code/gpio_pins_reader
+https://github.com/xMasterX/all-the-plugins dev apps_source_code/gpio_pins_reader 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/aureli1c/flipperzero_GPIO_read main /

+ 1 - 1
gpio_reader_b/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/flipperzero_gpioreader
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/flipperzero_gpioreader 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/biotinker/flipperzero-gpioreader main /

+ 1 - 1
gps_nmea/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/gps_nmea_uart
+https://github.com/xMasterX/all-the-plugins dev base_pack/gps_nmea_uart 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/ezod/flipperzero-gps main /

+ 1 - 1
hc_sr04/.gitsubtree

@@ -1 +1 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/hc_sr04
+https://github.com/xMasterX/all-the-plugins dev base_pack/hc_sr04 4558d74c9da36abc851edd96a95d18f7d5511a75

+ 1 - 1
heap_defence/.gitsubtree

@@ -1 +1 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/heap_defence_game
+https://github.com/xMasterX/all-the-plugins dev base_pack/heap_defence_game 4558d74c9da36abc851edd96a95d18f7d5511a75

+ 1 - 1
hex_editor/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev apps_source_code/hex_editor
+https://github.com/xMasterX/all-the-plugins dev apps_source_code/hex_editor 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/dunaevai135/flipper-zero-hex_editor main /

+ 1 - 1
hex_viewer/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/hex_viewer
+https://github.com/xMasterX/all-the-plugins dev base_pack/hex_viewer 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/QtRoS/flipper-zero-hex-viewer master /

+ 1 - 1
i2ctools/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/flipper_i2ctools
+https://github.com/xMasterX/all-the-plugins dev base_pack/flipper_i2ctools 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/NaejEL/flipperzero-i2ctools main /

+ 2 - 2
ifttt/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/ifttt
-https://github.com/Ferrazzi/FlipperZero_IFTTT_Virtual_Button main FlipperZero-IFTTT_app
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/ifttt 4558d74c9da36abc851edd96a95d18f7d5511a75
+https://github.com/Ferrazzi/FlipperZero_IFTTT_Virtual_Button main FlipperZero-IFTTT_app 4299c38c9776d4ae4e93fa5f7d0b5638855c0518

+ 1 - 1
ir_intervalometer/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev apps_source_code/ir_intervalometer
+https://github.com/xMasterX/all-the-plugins dev apps_source_code/ir_intervalometer 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/Nitepone/flipper-intervalometer main /

+ 1 - 1
ir_remote/.gitsubtree

@@ -1 +1 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/ir_remote
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/ir_remote 4558d74c9da36abc851edd96a95d18f7d5511a75

+ 1 - 1
ir_scope/.gitsubtree

@@ -1 +1 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/ir_scope
+https://github.com/xMasterX/all-the-plugins dev base_pack/ir_scope 4558d74c9da36abc851edd96a95d18f7d5511a75

+ 1 - 1
jetpack_joyride/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/jetpack_joyride
+https://github.com/xMasterX/all-the-plugins dev base_pack/jetpack_joyride 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/timstrasser/flipper-jetpack-game master /

+ 1 - 1
key_copier/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/key_copier
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/key_copier 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/zinongli/KeyCopier main /

+ 2 - 2
lightmeter/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/lightmeter
-https://github.com/oleksiikutuzov/flipperzero-lightmeter main application
+https://github.com/xMasterX/all-the-plugins dev base_pack/lightmeter 4558d74c9da36abc851edd96a95d18f7d5511a75
+https://github.com/oleksiikutuzov/flipperzero-lightmeter main application 13b958b07eb21813680bca39923151364f035daf

+ 1 - 1
magspoof/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/magspoof_flipper
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/magspoof_flipper 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/zacharyweiss/magspoof_flipper main /

+ 1 - 1
malveke_gb_cartridge/.gitsubtree

@@ -1 +1 @@
-https://github.com/EstebanFuentealba/MALVEKE-Flipper-Zero main flipper_companion_apps/applications/external/malveke_gb_cartridge
+https://github.com/EstebanFuentealba/MALVEKE-Flipper-Zero main flipper_companion_apps/applications/external/malveke_gb_cartridge 3e3a4aacbf3fffc741957a2a8bb19e4b9917966c

+ 1 - 1
malveke_gb_emulator/.gitsubtree

@@ -1 +1 @@
-https://github.com/EstebanFuentealba/MALVEKE-Flipper-Zero main flipper_companion_apps/applications/external/malveke_gb_emulator
+https://github.com/EstebanFuentealba/MALVEKE-Flipper-Zero main flipper_companion_apps/applications/external/malveke_gb_emulator 3e3a4aacbf3fffc741957a2a8bb19e4b9917966c

+ 1 - 1
malveke_gb_link_camera/.gitsubtree

@@ -1 +1 @@
-https://github.com/EstebanFuentealba/MALVEKE-Flipper-Zero main flipper_companion_apps/applications/external/malveke_gb_link_camera
+https://github.com/EstebanFuentealba/MALVEKE-Flipper-Zero main flipper_companion_apps/applications/external/malveke_gb_link_camera 3e3a4aacbf3fffc741957a2a8bb19e4b9917966c

+ 1 - 1
malveke_gb_live_camera/.gitsubtree

@@ -1 +1 @@
-https://github.com/EstebanFuentealba/MALVEKE-Flipper-Zero main flipper_companion_apps/applications/external/malveke_gb_live_camera
+https://github.com/EstebanFuentealba/MALVEKE-Flipper-Zero main flipper_companion_apps/applications/external/malveke_gb_live_camera 3e3a4aacbf3fffc741957a2a8bb19e4b9917966c

+ 1 - 1
malveke_gb_photo/.gitsubtree

@@ -1 +1 @@
-https://github.com/EstebanFuentealba/MALVEKE-Flipper-Zero main flipper_companion_apps/applications/external/malveke_gb_photo
+https://github.com/EstebanFuentealba/MALVEKE-Flipper-Zero main flipper_companion_apps/applications/external/malveke_gb_photo 3e3a4aacbf3fffc741957a2a8bb19e4b9917966c

+ 1 - 1
malveke_gba_cartridge/.gitsubtree

@@ -1 +1 @@
-https://github.com/EstebanFuentealba/MALVEKE-Flipper-Zero main flipper_companion_apps/applications/external/malveke_gba_cartridge
+https://github.com/EstebanFuentealba/MALVEKE-Flipper-Zero main flipper_companion_apps/applications/external/malveke_gba_cartridge 3e3a4aacbf3fffc741957a2a8bb19e4b9917966c

+ 1 - 1
malveke_pin_test/.gitsubtree

@@ -1 +1 @@
-https://github.com/EstebanFuentealba/MALVEKE-Flipper-Zero main flipper_companion_apps/applications/external/malveke_pin_test
+https://github.com/EstebanFuentealba/MALVEKE-Flipper-Zero main flipper_companion_apps/applications/external/malveke_pin_test 3e3a4aacbf3fffc741957a2a8bb19e4b9917966c

+ 2 - 2
mass_storage/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/mass_storage
-https://github.com/flipperdevices/flipperzero-good-faps dev mass_storage
+https://github.com/xMasterX/all-the-plugins dev base_pack/mass_storage 4558d74c9da36abc851edd96a95d18f7d5511a75
+https://github.com/flipperdevices/flipperzero-good-faps dev mass_storage b791dea234f855155027bb46215dc60f3ddeb243

+ 1 - 1
mayhem_camera/.gitsubtree

@@ -1 +1 @@
-https://github.com/eried/flipperzero-mayhem next flipper_companion_apps/applications/external/esp32cam_camera
+https://github.com/eried/flipperzero-mayhem next flipper_companion_apps/applications/external/esp32cam_camera 8c1ca3e94da8a8a954d4798051e1e13ac9abaab8

+ 1 - 1
mayhem_marauder/.gitsubtree

@@ -1 +1 @@
-https://github.com/eried/flipperzero-mayhem next flipper_companion_apps/applications/external/esp32cam_marauder_companion
+https://github.com/eried/flipperzero-mayhem next flipper_companion_apps/applications/external/esp32cam_marauder_companion 8c1ca3e94da8a8a954d4798051e1e13ac9abaab8

+ 1 - 1
mayhem_morseflash/.gitsubtree

@@ -1 +1 @@
-https://github.com/eried/flipperzero-mayhem next flipper_companion_apps/applications/external/esp32cam_morseflasher
+https://github.com/eried/flipperzero-mayhem next flipper_companion_apps/applications/external/esp32cam_morseflasher 8c1ca3e94da8a8a954d4798051e1e13ac9abaab8

+ 1 - 1
mayhem_motion/.gitsubtree

@@ -1 +1 @@
-https://github.com/eried/flipperzero-mayhem next flipper_companion_apps/applications/external/esp32cam_motion_detection
+https://github.com/eried/flipperzero-mayhem next flipper_companion_apps/applications/external/esp32cam_motion_detection 8c1ca3e94da8a8a954d4798051e1e13ac9abaab8

+ 1 - 1
mayhem_nannycam/.gitsubtree

@@ -1 +1 @@
-https://github.com/eried/flipperzero-mayhem next flipper_companion_apps/applications/external/esp32cam_nannycam
+https://github.com/eried/flipperzero-mayhem next flipper_companion_apps/applications/external/esp32cam_nannycam 8c1ca3e94da8a8a954d4798051e1e13ac9abaab8

+ 1 - 1
mayhem_qrcode/.gitsubtree

@@ -1 +1 @@
-https://github.com/eried/flipperzero-mayhem next flipper_companion_apps/applications/external/esp32cam_qrcode
+https://github.com/eried/flipperzero-mayhem next flipper_companion_apps/applications/external/esp32cam_qrcode 8c1ca3e94da8a8a954d4798051e1e13ac9abaab8

+ 1 - 1
meal_pager/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/meal_pager
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/meal_pager 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/leedave/flipper-zero-meal-pager main /

+ 1 - 1
metronome/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/metronome
+https://github.com/xMasterX/all-the-plugins dev base_pack/metronome 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/ezod/flipperzero-metronome main /

+ 2 - 2
mfc_editor/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/mfc_editor
-https://github.com/TollyH/flipper-apps main mfc-editor
+https://github.com/xMasterX/all-the-plugins dev base_pack/mfc_editor 4558d74c9da36abc851edd96a95d18f7d5511a75
+https://github.com/TollyH/flipper-apps main mfc-editor 3f7d07b1655ef5277e650156846e1bd8357a2b3c

+ 3 - 3
mfkey/.gitsubtree

@@ -1,3 +1,3 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/mfkey
-https://github.com/noproto/flipperzero-good-faps dev mfkey
-https://github.com/noproto/FlipperMfkey master fap_plugin
+https://github.com/xMasterX/all-the-plugins dev base_pack/mfkey 4558d74c9da36abc851edd96a95d18f7d5511a75
+https://github.com/noproto/flipperzero-good-faps dev mfkey 53996f31bdab19ed85bcb0726b6550a832372a54
+https://github.com/noproto/FlipperMfkey master fap_plugin 9928b2ee117f0ed6e5e202f7c06f8ce5797382fa

+ 1 - 1
mifare_fuzzer/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev apps_source_code/mifare_fuzzer
+https://github.com/xMasterX/all-the-plugins dev apps_source_code/mifare_fuzzer 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/spheeere98/mifare_fuzzer master /

+ 1 - 1
minesweeper/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/minesweeper
+https://github.com/xMasterX/all-the-plugins dev base_pack/minesweeper 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/panki27/minesweeper master /

+ 1 - 1
morse_code/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/morse_code
+https://github.com/xMasterX/all-the-plugins dev base_pack/morse_code 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/wh00hw/MorseCodeFAP master /

+ 1 - 1
multi_converter/.gitsubtree

@@ -1 +1 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/multi_converter
+https://github.com/xMasterX/all-the-plugins dev base_pack/multi_converter 4558d74c9da36abc851edd96a95d18f7d5511a75

+ 2 - 2
music_player/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/music_player
-https://github.com/flipperdevices/flipperzero-good-faps dev music_player
+https://github.com/xMasterX/all-the-plugins dev base_pack/music_player 4558d74c9da36abc851edd96a95d18f7d5511a75
+https://github.com/flipperdevices/flipperzero-good-faps dev music_player b791dea234f855155027bb46215dc60f3ddeb243

+ 2 - 2
nfc_magic/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/nfc_magic
-https://github.com/flipperdevices/flipperzero-good-faps dev nfc_magic
+https://github.com/xMasterX/all-the-plugins dev base_pack/nfc_magic 4558d74c9da36abc851edd96a95d18f7d5511a75
+https://github.com/flipperdevices/flipperzero-good-faps dev nfc_magic b791dea234f855155027bb46215dc60f3ddeb243

+ 1 - 1
nfc_playlist/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/nfc_playlist
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/nfc_playlist 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/acegoal07/FlipperZero_NFC_Playlist main /

+ 2 - 2
nfc_rfid_detector/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/nfc_rfid_detector
-https://github.com/flipperdevices/flipperzero-good-faps dev nfc_rfid_detector
+https://github.com/xMasterX/all-the-plugins dev base_pack/nfc_rfid_detector 4558d74c9da36abc851edd96a95d18f7d5511a75
+https://github.com/flipperdevices/flipperzero-good-faps dev nfc_rfid_detector b791dea234f855155027bb46215dc60f3ddeb243

+ 1 - 1
nightstand_clock/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/FlipperNightStand_clock
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/FlipperNightStand_clock 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/nymda/FlipperNightStand main /

+ 1 - 1
nrf24batch/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/nrf24-batch
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/nrf24-batch 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/vad7/nRF24-Batch main /

+ 2 - 2
nrf24channelscanner/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/nrf24channelscanner
-https://github.com/htotoo/NRF24ChannelScanner main NRF24ChannelScanner
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/nrf24channelscanner 4558d74c9da36abc851edd96a95d18f7d5511a75
+https://github.com/htotoo/NRF24ChannelScanner main NRF24ChannelScanner e92da5db51ebbf0402d5e07b7af3a8d696817be2

+ 1 - 1
nrf24mousejacker/.gitsubtree

@@ -1 +1 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/mousejacker
+https://github.com/xMasterX/all-the-plugins dev base_pack/mousejacker 4558d74c9da36abc851edd96a95d18f7d5511a75

+ 1 - 1
nrf24scan/.gitsubtree

@@ -1,2 +1,2 @@
-https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/nrf24scan
+https://github.com/xMasterX/all-the-plugins dev non_catalog_apps/nrf24scan 4558d74c9da36abc851edd96a95d18f7d5511a75
 https://github.com/vad7/nrf24scan master /

+ 1 - 1
nrf24sniff/.gitsubtree

@@ -1 +1 @@
-https://github.com/xMasterX/all-the-plugins dev base_pack/nrfsniff
+https://github.com/xMasterX/all-the-plugins dev base_pack/nrfsniff 4558d74c9da36abc851edd96a95d18f7d5511a75

Vissa filer visades inte eftersom för många filer har ändrats