eeln.in 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #!/bin/bash
  2. . __FFOOD_INIT__
  3. FFOOD_INIPATH="__FFOOD_INIPATH__"
  4. ffood import core
  5. DEFAULT_TARGET=$HOME
  6. TRY_RELPATH=true
  7. FORCE=false
  8. PY_SCRIPT="
  9. import os.path
  10. import sys
  11. src, dst = sys.argv[1:]
  12. r = os.path.relpath(src, dst)
  13. a = os.path.abspath(src)
  14. if len(a) < len (r):
  15. print a
  16. else:
  17. print r
  18. "
  19. usage() {
  20. local u
  21. u="[-d|--debug] [-f|--force] [-v|--verbose]"
  22. u="$u [-i|--intermediate] [-t|--target TARGET] SOURCE [NAME]"
  23. usage_is "$u"
  24. }
  25. link() {
  26. local src=$1
  27. local dst=$2
  28. debug -v src dst
  29. if $TRY_RELPATH;
  30. then
  31. src=$(python <(echo "$PY_SCRIPT") "$src" "$(dirname $dst)")
  32. fi
  33. think "linking $src to $dst"
  34. rm -f $dst
  35. ln -s $src $dst
  36. }
  37. load() {
  38. iniread -p ln.dir.$1 ln.ini | expand_tilde | debug_pipe out
  39. }
  40. while true;
  41. do
  42. case $1 in
  43. -d|--debug)
  44. FFOOD_DEBUG=true
  45. shift
  46. ;;
  47. -f|--force)
  48. FORCE=true
  49. shift
  50. ;;
  51. -i|--intermediate)
  52. intermediate=$2
  53. shift 2
  54. ;;
  55. -v|--verbose)
  56. FFOOD_VERBOSE=true
  57. shift
  58. ;;
  59. -t|--target)
  60. target=$2
  61. shift 2
  62. ;;
  63. "")
  64. usage
  65. ;;
  66. *)
  67. src=$1
  68. name=$2
  69. break
  70. ;;
  71. esac
  72. done
  73. test -z "$target" && target=$(load target)
  74. test -z "$intermediate" && intermediate=$(load intermediate)
  75. test -z "$prefix" && prefix=$(load prefix)
  76. test -z "$target" && target=$DEFAULT_TARGET
  77. case $prefix.$name in
  78. .) die "provide at least name or set prefix in ln.ini";;
  79. $prefix.) name=$prefix;;
  80. .$name) :;;
  81. *) name=$prefix.$name;;
  82. esac
  83. debug -v name intermediate target
  84. mkdir -p $target
  85. if test -n "$intermediate";
  86. then
  87. mkdir -p $intermediate
  88. link $src $intermediate/$name
  89. link $intermediate/$name $target/$name
  90. else
  91. link $src $target/$name
  92. fi