saturnin-ln 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/bin/bash
  2. . $(ffoom path)
  3. ffoo import pretty
  4. DEFAULT_TARGET=$HOME
  5. TRY_RELPATH=true
  6. PY_SCRIPT="
  7. import os.path
  8. import sys
  9. src, dst = sys.argv[1:]
  10. r = os.path.relpath(src, dst)
  11. a = os.path.abspath(src)
  12. if len(a) < len (r):
  13. print a
  14. else:
  15. print r
  16. "
  17. usage() {
  18. usage_is "[-t|--target TARGET] [SOURCE] [NAME]"
  19. }
  20. expand_tilde() {
  21. #
  22. # Exchange "~" for home
  23. #
  24. perl -pe "s|^[[:space:]]*~|$HOME|"
  25. }
  26. maybe_relpath() {
  27. local src="$1"
  28. local dst="$2"
  29. $TRY_RELPATH || { echo "$src"; return 0; }
  30. {
  31. echo 'import os.path'
  32. echo 'import sys'
  33. echo 'src, dst = sys.argv[1:]'
  34. echo 'r = os.path.relpath(src, dst)'
  35. echo 'a = os.path.abspath(src)'
  36. echo 'if len(a) < len (r):'
  37. echo ' print a'
  38. echo 'else:'
  39. echo ' print r'
  40. } | python "$src" "$dst"
  41. }
  42. link() {
  43. local src=$1
  44. local dst=$2
  45. debug -v src dst
  46. if $TRY_RELPATH;
  47. then
  48. src=$(python <(echo "$PY_SCRIPT") "$src" "$(dirname $dst)")
  49. fi
  50. think "linking $src to $dst"
  51. rm -f $dst
  52. ln -s $src $dst
  53. }
  54. load() {
  55. saturnin conf -p ln.dir.$1 | expand_tilde
  56. }
  57. while true; do case $1 in
  58. -t|--target) target=$2 shift 2 ;;
  59. --help) usage ;;
  60. -*) usage ;;
  61. *) src=$1; name=$2; break ;;
  62. esac done
  63. test -z "$target" && target=$(load target)
  64. test -z "$target" && target=$DEFAULT_TARGET
  65. test -z "$name" && name="$(basename "$PWD")"
  66. test -z "$src" && src="."
  67. debug -v name target
  68. mkdir -p $target
  69. link $src $target/$name