executable_git_domain_to_group_project.sh 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #!/usr/bin/env bash
  2. git_https_repository_to_domain_name()
  3. {
  4. echo "$(git -C "$(dirname "$1")" remote -v)" \
  5. | grep origin \
  6. | head -n 1 \
  7. | grep -oP 'https://(.*)/' \
  8. | sed 's@https://@@' \
  9. | cut -d/ -f 2
  10. }
  11. git_https_repository_to_project()
  12. {
  13. echo "$(git -C "$(dirname "$1")" remote -v)" \
  14. | grep origin \
  15. | head -n 1 \
  16. | grep -o 'https://.* ' \
  17. | cut -d/ -f 5 \
  18. | sed 's@\s\(fetch\)@@;' \
  19. | sed 's@.git@@'
  20. }
  21. git_ssh_repository_to_domain_name()
  22. {
  23. echo "$(git -C "$(dirname "$1")" remote -v)" \
  24. | grep origin \
  25. | head -n 1 \
  26. | grep -o 'git@.*' \
  27. | cut -d: -f 2 \
  28. | sed 's@ (fetch)@@' \
  29. | sed 's@.git@@' \
  30. | cut -d/ -f 1
  31. }
  32. git_ssh_repository_to_project()
  33. {
  34. echo "$(git -C "$(dirname "$1")" remote -v)" \
  35. | grep origin \
  36. | head -n 1 \
  37. | grep -o 'git@.*' \
  38. | cut -d/ -f 2 \
  39. | sed 's@ (fetch)@@' \
  40. | sed 's@.git@@'
  41. }
  42. for dir in */.git
  43. do
  44. domain="$(git_https_repository_to_domain_name "$dir")"
  45. project="$(git_https_repository_to_project "$dir")"
  46. if [[ $domain != "" ]]
  47. then
  48. if [[ $domain -eq $project ]]
  49. then
  50. echo sudo mv -i "$(dirname "$dir")" "$(dirname "$dir").1"
  51. echo mkdir -p "$domain"
  52. echo sudo mv -i "$(dirname "$dir").1" "${domain}/${project}"
  53. else
  54. echo mkdir -p "$domain"
  55. echo sudo mv -i "$(dirname "$dir")" "${domain}/${project}"
  56. fi
  57. fi
  58. done
  59. for dir in */.git
  60. do
  61. domain="$(git_ssh_repository_to_domain_name "$dir")"
  62. project="$(git_ssh_repository_to_project "$dir")"
  63. if [[ $domain != "" ]]
  64. then
  65. if [[ $domain -eq $project ]]
  66. then
  67. echo sudo mv -i "$(dirname "$dir")" "$(dirname "$dir").1"
  68. echo mkdir -p "$domain"
  69. echo sudo mv -i "$(dirname "$dir").1" "${domain}/${project}"
  70. else
  71. echo mkdir -p "$domain"
  72. echo sudo mv -i "$(dirname "$dir")" "${domain}/${project}"
  73. fi
  74. fi
  75. done
  76. # oleg@guixsd ~/src$ for dir in $(ls -d */*/.git | xargs dirname | xargs dirname | sort -u); do (cd "$dir"; eval "$(~/.local/share/chezmoi/dot_local/bin/executable_git_directories_to_domain.sh)"); done