summaryrefslogtreecommitdiff
path: root/src/maintenance-tools/meld-src-pkgbuilds
blob: 32802a3277b5331b05ac350b1a610a95cd53c218 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#!/bin/bash

# readonly PKGS_DIR=/packages
                       echo "$(grep 'WORKDIR=' /etc/libretools.conf | sed 's|^WORKDIR="\([^"]*\)"|\1|') IN"
                       echo "$(grep 'WORKDIR=' /etc/libretools.conf | sed 's|^WORKDIR=||' | tr '"' ' ') IN"
readonly PKGS_DIR="$(source /etc/libretools.conf ; echo "${WORKDIR}" ;)"
# readonly PKGS_DIR="$(source "$(grep 'WORKDIR=' /etc/libretools.conf)" ; echo "${WORKDIR}")"
echo "PKGS_DIR=$PKGS_DIR"
[[ ! -d "$PKGS_DIR" ]] && echo "no such dir" && exit 1

# readonly PKGS_DIR=$(grep 'WORKDIR=' /etc/libretools.conf | sed 's|.*WORKDIR="\([^"]*\)*"|\1|')

read -r -d '' USAGE <<-'USAGE_MSG'
USAGE:

  $0 [ -a | -g ] PKGBUILD-or-srcpkg-or-pkgname PKGBUILD-or-srcpkg

OPTIONS:

  $0 [ -a ] UseAbs
  $0 [ -g ] UseGui

EXAMPLES:

# # local srcpkg_a='icecat'
# # local srcpkg_a="$(SelectSrcpkg "${pkgname}")"
# # local srcpkg_=/packages/abslibre/libre/icecat/PKGBUILD
# # local srcpkg_=/packages/abslibre/libre/icecat/icecat-78.10.0_pre2-1-x86_64.src.tar.gz
USAGE_MSG
exit
readonly UseAbs=0
readonly UseGui=0
SelectSrcpkg() # (pkgname)
{
echo "SelectSrcpkg() OUT"; return

  # echo back parameter, if not a valid pkgname
  local pkgname=$1
  local pkgname_rx='^[0-9a-z][0-9a-zA-Z_-]*$'
  local pkg

# echo "SelectSrcpkg() pkgname='$pkgname' sourcepkg $( [[ "$pkgname" =~ ${pkgname_rx} ]] && pacman -Si "$pkgname" &> /dev/null || echo " not")exists" >&2 ;

  [[ "${pkgname}" =~ ${pkgname_rx} ]] && pacman -Si ${pkgname} &> /dev/null || return 1

# echo "SelectSrcpkg() pkgname=${pkgname} PKGS_DIR=$PKGS_DIR is $( pacman -Qsq ${pkgname} &> /dev/null || echo 'not ') installed" >&2

  local srcpkgs_glob="${pkgname}-*.src.tar.gz"
  local pkgs=( $(find "${PKGS_DIR}"/abslibre/ -type f -name "${srcpkgs_glob}" 2> /dev/null) \
               $(find "${PKGS_DIR}"/sources/  -type f -name "${srcpkgs_glob}" 2> /dev/null) )

# printf "SelectSrcpkg() ${#pkgs[@]} pkgs=%s\n" "${pkgs[@]}" >&2

  (( ${#pkgs[@]} )) && [[ -n "${pkgs[@]}" ]] || return 1

  select pkg in "${pkgs[@]}" ; do echo "${pkg}" ; break ; done
echo "SelectSrcpkg() OUT"
}

GitPkgbuilds()
{
echo "GitPkgbuilds() IN" ; return
  local pkgname_rx='^[-@\._\+0-9a-z]+$'
  local pkgname=$(    [[ "$1" =~ ${pkgname_rx} ]] && echo "$1"        )
  local sort_order=$( [[ "$2" == '--reverse'   ]] && echo '--reverse' )
  [[ -z "${pkgname}" ]]                           && echo "invalid pkgname: '$1'" && return 1
echo "GitPkgbuilds() 2"

  local arch_dirs="$( find -L $ABS_DIR/      -maxdepth 2 -type d -name $pkgname | sort $sort_order)"
  local abs_dirs="$(  find    $ABSLIBRE_DIR/ -maxdepth 2 -type d -name $pkgname | sort $sort_order)"
  local arch_dir="$(  head -n 1 <<<${arch_dirs})"
  local abs_dir="$(   head -n 1 <<<${abs_dirs} )"
  local is_writable=$(touch ${abs_dir}/PKGBUILD &> /dev/null ; echo $(( ! $? )) ; )

  [[ -z "$arch_dir"                             ]] && echo "no such arch PKGBUILD"     && return 1
  [[ -z "$abs_dir"                              ]] && echo "no such parabola PKGBUILD" && return 1

  [[ "$arch_dir" =~ $ABS_DIR.+$ABS_DIR          ]] && echo "multiple arch PKGBUILDs found (try --reverse)"
  [[ "$abs_dir" =~ $ABSLIBRE_DIR.+$ABSLIBRE_DIR ]] && echo "multiple abslibre PKGBUILDs found (try --reverse)"
  (( ! ${is_writable}                           )) && echo "fixing 'dev' group perms on ABS dir" && mkdev ${abs_dir}/
  ls --color=auto --group-directories-first -F -l ${arch_dir}/trunk/ ${abs_dir}/

echo "GitPkgbuilds() OUT" #   ( set -x ; echo ${arch_dir}/trunk/ ${abs_dir}/ )
}

DoDiff()
{
  local a="$1$( (( UseAbs )) || echo '/PKGBUILD')"
  local b="$2$( (( UseAbs )) || echo '/PKGBUILD')"
  local sed_rx='s|(\-\-\-\|\+\+\+) /dev/fd/[0-9]*\s*(.*)|\1 /PKGBUILD \2|'
  local patch_file=srcpkgbuild.patch

  [[ -n "${pkgbuild_a}" && -n "${pkgbuild_b}" ]] || return 1

  if   diff ${srcpkg_a} ${srcpkg_b}                    &> /dev/null
  then echo "source packages identical"
  else echo "source packages differ"
       if   diff <("${pkgbuild_a}") <("${pkgbuild_b}") &> /dev/null
       then echo "PKGBUILDs identical"
       else echo "PKGBUILDs differ"
            if   (( UseGui ))
            then echo "launching meld"
                 meld       <("${a}") <("${b}")
            elif diff -u -r <("${a}") <("${b}") | sed -E "${diff_sed_rx}" | tee ${patch_file}
            fi
       fi
  fi
}

main()
{
echo "meld-src-pkgbuilds() IN" # $# $@" >&2 ; local in=$# ;

#   local UseGui=$( [[ "$1" == '--gui' ]] ; echo ! $(($?)) ) ; (( UseGui )) && shift ;
#   local UseGui=$( while getopts 'g' opt ; do [[ "${opt}" == 'g' ]] ; echo $(( ! $? )) ; done ; shift $(( OPTIND - 1 )) ; )
  while getopts 'ag' opt
  do case "$opt" in
     a) UseAbs=1                                                  ;;
     g) UseGui=1                                                  ;;
     *) echo "invalid option: '%s'" "${opt}\n${USAGE}" ; return 1 ;;
     esac
  done ; shift $(( OPTIND - 1 )) ;

  local srcpkg_a="$( (( UseAbs )) && $(GitPkgbuilds "$1"                      || echo "$1" ) || \
                                     $(SelectSrcpkg "$1" || GitPkgbuilds "$1" || echo "$1" )    )"
  local srcpkg_b="$( (( UseAbs )) && $(GitPkgbuilds "$2"                      || echo "$2" ) || \
                                     $(SelectSrcpkg "$1" || GitPkgbuilds "$2" || echo "$2" )    )"
  local is_src_pkg=$(  [[ "${srcpkg_a}" =~ src\.tar\.gz$                     && \
                          "${srcpkg_b}" =~ src\.tar\.gz$                     ]] ; echo $(( ! $? )) )
  local is_abs_dir=$(  (( UseAbs ))                   && [[ -d "${srcpkg_a}" && \
                                                            -d "${srcpkg_b}" ]] ; echo $(( ! $? )) )
  local is_pkgbuild=$( [[ "${srcpkg_a}" =~ /PKGBUILD$ && -f "${srcpkg_a}"    && \
                          "${srcpkg_b}" =~ /PKGBUILD$ && -f "${srcpkg_b}"    ]] ; echo $(( ! $? )) )

echo -e "meld-src-pkgbuilds()\n  srcpkg_a=${srcpkg_a}\n  srcpkg_b=${srcpkg_b}" >&2

  if   [[ -n "${srcpkg_a}" && -n "${srcpkg_b}" && "${srcpkg_a}" != "${srcpkg_b}" ]]
  then echo "arguments must be one <pkgname>, or two unique *.src.tar.gz or PKGBUILD"

  elif (( is_src_pkg ))
  then local pkgbuild_a="$( [[ -f "${srcpkg_a}" ]] && tar -ztf "${srcpkg_a}" | grep PKGBUILD )"
       local pkgbuild_b="$( [[ -f "${srcpkg_b}" ]] && tar -ztf "${srcpkg_b}" | grep PKGBUILD )"

echo -e "meld-src-pkgbuilds()\n  pkgbuild_a=${pkgbuild_a}\n  pkgbuild_b=${pkgbuild_b}\n  tar_a_cmd=${tar_a_cmd[@]}\n  tar_b_cmd=${tar_b_cmd[@]}" >&2

       if   [[ -n "${pkgbuild_a}" && -n "${pkgbuild_b}" ]]
       then cd /tmp
            tar -zxf "${srcpkg_a}" "${pkgbuild_a}" > srcpkgbuild_a
            tar -zxf "${srcpkg_b}" "${pkgbuild_b}" > srcpkgbuild_b
            DoDiff srcpkgbuild_a srcpkgbuild_b
       fi

  elif (( is_abs_dir || is_pkgbuild ))
  then DoDiff "${srcpkg_a}" "${srcpkg_b}"
  fi
}



main "$@"