Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tools/make: contains source code #308

Closed

Conversation

PeterPawn
Copy link
Contributor

and should therefore be under Git control

If there wasn't any good reason to exclude the whole tools directory from source control (I could not find any documentation belonging to), its sub-directory make should get included again, 'cause it contains "source" files as patches and even directly the source code for some tools (with "inline source").

Otherwise it should get documented clearly (a .gitignore file isn't enough, there should be a file with an explanation/description, e.g. a README.md in the tools sub-directory, too) - it's a waste of time for supporters, if they have to discover themselves, why source control doesn't work as expected below tools (new files are not detected, but changes to files already under source control are shown).

It's obviously, why the tools directory itself was excluded (this doesn't require an explanation for others in my opinion) - it contains compilation results after make tools. But this does not explain, why the make directory had not get included again as a whole (or better: the exclusion wasn't reverted again for this sub-directory).

PeterPawn referenced this pull request in Freetz-NG/freetz-ng Jul 20, 2020
@er13
Copy link
Member

er13 commented Jul 20, 2020

Kann dir leider nicht folgen.

  • Könntest du bitte sagen, welches konkrete Problem Du hast? Ich kann dieses aus deiner Lösung dafür leider nicht ableiten.
  • Inwieweit hängt es mit dem Revert zusammen bzw. warum wird der Revert referenziert?
  • Wieso bist du der Meinung, dass tools aus dem Source-Control ausgeschlossen wird, sodass dann das darunter liegende make wieder aktiv unter Source-Control gebracht werden muss? In welchem .gitignore wird es ausgeschlossen? Kann es sein, dass es nur in deinem Fork der Fall ist?

Danke!

@PeterPawn
Copy link
Contributor Author

peh@vidar:~> cd /tmp
peh@vidar:/tmp> git clone https://github.com/Freetz/freetz.git peh_freetz
Cloning into 'peh_freetz'...
remote: Enumerating objects: 144183, done.
remote: Total 144183 (delta 0), reused 0 (delta 0), pack-reused 144183
Receiving objects: 100% (144183/144183), 34.09 MiB | 7.92 MiB/s, done.
Resolving deltas: 100% (95882/95882), done.
peh@vidar:/tmp> cd peh_freetz/
peh@vidar:/tmp/peh_freetz> git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
peh@vidar:/tmp/peh_freetz> sha256sum tools/.gitignore
5b490f648780e40c7a072938d3a5ad345357a17601ed57db869d874c2df7a812  tools/.gitignore
peh@vidar:/tmp/peh_freetz> wc -l tools/.gitignore
48 tools/.gitignore
peh@vidar:/tmp/peh_freetz> sha256sum tools/.gitignore >tools/make/squashfs4-host-be/patches/999-test
peh@vidar:/tmp/peh_freetz> git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
peh@vidar:/tmp/peh_freetz> printf '!/make\n!/make/\n!/make/*\n' >> tools/.gitignore
peh@vidar:/tmp/peh_freetz> git status
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   tools/.gitignore

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        tools/make/squashfs4-host-be/patches/999-test

no changes added to commit (use "git add" and/or "git commit -a")
peh@vidar:/tmp/peh_freetz>

Die tools/.gitignore existiert ja nun ohne jeden Zweifel im Freetz-Master: https://github.com/Freetz/freetz/blob/master/tools/.gitignore

Bei ihrem derzeitigen Inhalt wird offensichtlich alles, was sich unterhalb von tools befindet (ab dort gilt sie) und einem der dort enthaltenen Muster entspricht, von der Versionierung ausgenommen, sofern es nicht bereits hinzugefügt wurde (was man mittels der Option -f beim git stage natürlich auch erzwingen kann).

Wie man im Beispiel oben sehen kann, wirkt sich eben die Zeile *squashfs* auch auf tiefer liegende Ebenen (hier unterhalb von tools/make) aus und dort liegende, neue Dateien (hier die Ausgabe von sha256sum in eine Datei) werden ignoriert.

Das gilt natürlich nicht nur für git status, sondern auch für die anderen Kommandos - wie z.B. git diff und da fehlen dann halt in der Ausgabe all die neuen Dateien.

Die zusätzlichen drei Zeilen führen dazu, daß zwar das Pattern *squashfs* weiterhin ignoriert werden würde (das gilt auch für alle anderen, die da ggf. hinzukämen), aber das wieder rückgängig gemacht wird, sofern die betroffenen Dateien sich unterhalb von tools/make befinden.

Aufgrund der besonderen Behandlung von Verzeichnissen in der .gitignore (https://git-scm.com/docs/gitignore) habe ich auch diese Form der drei Zeilen gewählt, denn mit denen in der tools/.gitignore ist es auch mit weiteren Einträgen (zumindest vor diesen Zeilen) fast unmöglich, die Versionierung unterhalb von tools/make versehentlich wieder einzuschränken und auch wenn die letzte Zeile bereits ausreichend wäre, schaden die zwei davor nicht - solange da kein einzelnes File make erscheint, was wegen der Existenz des Verzeichnisses tools/make ja nicht zu erwarten steht.

Sie sind also eher aus "guards" zu sehen - ich gehe mal davon aus, daß der (oben demonstrierte) Effekt der Eintragungen in der tools/.gitignore eigentlich nicht beabsichtigt war. Daher auch meine Aussage, daß es - sofern es doch Absicht wäre - entsprechend dokumentiert sein sollte.

@PeterPawn
Copy link
Contributor Author

OK, wenn ich jetzt meinen ersten Satz im ersten Kommentar noch einmal lese, war das ggf. nicht ganz eindeutig formuliert, weil ja nicht das "ganze Verzeichnis tools" von der Versionierung ausgenommen wird - die dort liegenden Shell-Skripte werden ja auch "direkt vor Ort" beachtet.

Trotzdem entsteht das Problem eben durch die Verwendung von Pattern mit Wildcard-Zeichen (im Moment sind's nur zwei Zeilen, aber auch die hat ja irgendjemand in dieser Form da eingetragen, die sich auf tieferliegende Pfade auch auswirkt) und die Ergänzungen am Ende der Datei sorgen dann tatsächlich wieder dafür, daß man davor sehr viele solcher "Fehler" begehen kann (man wird auch nicht vor jedem Eintrag dort erst alle Unterverzeichnisse und darin liegende Dateien prüfen), ohne daß es am Ende dazu führt, daß Dateien verloren gehen können, weil sie von der Versionsverwaltung ignoriert und nicht angezeigt werden.

@er13
Copy link
Member

er13 commented Jul 22, 2020

Alles klar, Danke für die ausführliche Erklärung. Ich habe

exclude the whole tools directory

in der Tat wortwörtlich verstanden.

Trotzdem entsteht das Problem eben durch die Verwendung von Pattern mit Wildcard-Zeichen (im Moment sind's nur zwei Zeilen, aber auch die hat ja irgendjemand in dieser Form da eingetragen, die sich auf tieferliegende Pfade auch auswirkt)

Sicher? Nach dem ausführlichen Lesen der von dir verlinkten Doku zu gitignore meine ich es sind viel mehr Zeilen, die Probleme verursachen, quasi potentiell jede:

$ touch tools/make/{xz,md5sum} tools/make/genext2fs/foobar
$ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
$ sed -i -e '/^[^/]/ s|^|/|' tools/.gitignore tools/config/.gitignore
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   tools/.gitignore
        modified:   tools/config/.gitignore

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        tools/make/genext2fs/foobar
        tools/make/md5sum
        tools/make/xz

no changes added to commit (use "git add" and/or "git commit -a")

@er13 er13 closed this in dc948b9 Jul 22, 2020
fda77 pushed a commit to Freetz-NG/freetz-ng that referenced this pull request Jul 23, 2020
…meant to

Thanks to @PeterPawn for pointing it out.

closes Freetz#308

(cherry picked from commit dc948b9)
@PeterPawn PeterPawn deleted the do_not_ignore_tools_make_directory branch July 25, 2020 10:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants