Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.058 Beiträge
 
Delphi 12 Athens
 
#23

AW: GIT-Submodul version auslesen

  Alt 29. Mai 2020, 17:07
Moin,

im Batch-Script (git-info.cmd) sieht es so aus
Code:
chcp 1252
bash git-info.sh %1
und im Bash-Script (git-info.sh) kommt sowas vor
Code:
gitdir=$1
if [ -n "$gitdir" ]; then gitdir="$(cygpath -u "$gitdir")"; fi
cd "$gitdir"
Nun wird aber bei einem Ümlaut im Pfad gemeckert
Code:
S:\MyRepo\git-info.sh: line 12: cd: $'"S:/MyRepo//master, aktuell mit □\204nderung im Stash"': No such file or directory
Also entweder stimmt irgendwo die Codierung nicht (UTF-8/ANSI)
oder cygpath mag mich micht.


Ach ja, im Großen und Ganzen läuft es und auch wenn ich "aktuell" mit Umlauten nicht in Berührung komme,
wie könnte ich das Problemchen dennoch lösen?


Code:
#!/bin/bash

##### Input :: bash git-info.sh DIR DEST [|branch|version|log]
gitdir=$1
dest=$2
mode=$3
if [ -n "$gitdir" ]; then gitdir="$(cygpath -u "$gitdir")"; fi
if [ -n "$dest" ];  then dest="$(cygpath -u "$dest")"; fi

## hier oder angegebenen Verzeichnis
if [ -n "$gitdir" ]; then
  cd "$gitdir"
fi

if [ "$mode" == "log" ]; then
  # Branch-References # Autor, Relative, CommitDate # Subject ## Message-Body
  ## HEAD -> master, origin/master, origin/HEAD
  ## geo, 3 days ago, 2020-04-17 22:46:58 +0200
  ## Formular 'DBSQL-Stataments durchsuchen' anpassungen (#194)
  ## ...
  result=$(git show -s --format=format:"%D %n%an, %ar, %ci %n%s %n%n%b" | sed "s#\\n#\\r\\n#g")
else
  ##### Behandlung für Submodul wenn Branch nicht "richtig" auslesbar (z.B. wenn GIT SHOW nur "HEAD" ausgibt)
  if [ -f ".git" ] && [ -d "../.git" ]; then
    dirname=${gitdir##*/}
    dirname=${dirname#(/[(]}
    dirname=${dirname#)/[)]}
    branch=$(git -C .. submodule | grep ".[0-9a-f]+ $dirname \\(.*\\)$")
  fi

  ##### Branch, Version, CommitDatum und CommitLog
  if [ -z "$branch" ]; then branch=$(git show -s --pretty=format:"%D"); fi
  version=$(git describe --tags --always "--dirty=*")
  cdate=$(git show -s --format=format:"%ci")

  ##### Formate konvertieren
  ## BranchName exrahieren :: xxx | aaa -> xxx | aaa -> xxx, yyy, zzz ==> xxx
  ## Hash und Version+Offset trennen :: vvv-i-gxxxxxxxx ==> yyy+i xxxxxxxx
  ## Datum lesbarer :: 2019-11-05T09:27:17+01:00 ==> 2019-11-05 09:27
  branch=$(echo "$branch" | awk '{ print gensub(".* ?-> ?", "", "g") }')
  branch=$(echo "$branch" | awk '{ print gensub("^HEAD, ?", "", "g") }')
  branch=$(echo "$branch" | awk '{ print gensub(" ?,.*$", "\\1", "g") }')
  version=$(echo "$version" | awk '{ print gensub("-([0-9]+)-g([0-9a-f]{8})", "+\\1 \\2", "g") }')
  cdate=$(echo "$cdate" | awk '{ print gensub("([0-9]{4}-[0-9]{2}-[0-9]{2})[T ]([0-9]{2}:[0-9]{2}):[0-9]{2}([ ]?[+-][0-9]{2}:?[0-9]{2})?", "\\1 \\2", "g") }')

  ##### Zusatzinfo über geänderte oder neue Dateien (nicht commited)
  #if [ $(git diff --stat) != '' ]; then dirty="*"; fi  # modified files exists
  #if [ -z $(git status -s) ]; then dirty="**"; fi      # modified or untracked files exists

  ##### Ausgabe
  if [ "$mode" == "branch" ]; then
    result="$branch"
  elif [ "$mode" == "version" ]; then
    if [[ "$version" =~ "+" ]]; then
      # 19.10.02+37 7c8c3e76*
      result="$version"
    else
      # 7c8c3e76* 2019-11-05 09:27 
      result="$version $cdate"
    fi
  else
    # master 7c8c3e76 2019-11-05 09:27                 (ohne Version-Tag)
    # master 19.10.02+37 7c8c3e76* 2019-11-05 09:27    (Version-Tag vorhanden)
    result="$branch $version $cdate"
  fi
fi

#clear
echo $result
if [ -n "$dest" ]; then
  echo -n "$result" > $dest
fi
Bash kann einem aber schon ein bissl abschrecken und für alles gibt es tausende Wege, wo man die Vorschläge/Tutorials im Internet oft nur schwer versteht.
Und die Hilfe kann einen auch manchmal erschrecken, so dass man gleich wegrennen will.
Zitat:
Bash supports a surprising number of string manipulation operations. Unfortunately, these tools lack a unified focus. Some are a subset of parameter substitution, and others fall under the functionality of the UNIX expr command. This results in inconsistent command syntax and overlap of functionality, not to mention confusion.
aus https://www.tldp.org/LDP/abs/html/st...ipulation.html
Klingt schon ein bisschen nach: bash ist bissl davon und ein bissl davon, aber von nichts was richtiges.
Ich will jetzt aber kein bashing betreiben.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (29. Mai 2020 um 17:11 Uhr)
  Mit Zitat antworten Zitat