#!/bin/bash # Script searches for packages with pending changes (UNRELEASED) and # either lists them or displays the relevant changelog entry. # Usage: list-unreleased [-cR] # -c : display pending changes # -R : don't recurse # Copyright: Frans Pop , 2007 # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. PATHS="" DO_CL="" RECURSE=1 while true; do case "$1" in "") break ;; -c) DO_CL=1 ;; -R) RECURSE= ;; -*) echo "unrecognized argument '$1'" exit 1 ;; *) PATHS="${PATHS:+$PATHS }$1" ;; esac shift done [ "$PATHS" ] || PATHS=. vcs_dirs='\(\.\(svn\|hg\|git\|bzr\)\|_darcs\|_MTN\|CVS\)' get_list() { local path="$1" for dir in $( if [ "$RECURSE" ]; then find "$path" -type d ! -regex "$vcs_dirs" else find "$path" -maxdepth 1 -type d ! -regex "$vcs_dirs" fi ); do changelog="$dir/debian/changelog" if [ -f "$changelog" ] ; then if head -n1 "$changelog" | grep -q UNRELEASED; then echo $dir fi fi done | sort } print_cl() { local package="$1" changelog="$package/debian/changelog" # Check if more than one UNRELEASED entry at top of changelog Ucount=$(grep "^[^ ]" $changelog | \ head -n2 | grep -c UNRELEASED) if [ $Ucount -eq 1 ]; then sed -n "1,/^ --/p" $changelog else echo "ERROR: changelog has more than one UNRELEASED entry!" # Second sed is to add back a blank line between entries sed -n "/^[^ ].*UNRELEASED/,/^ --/p" $changelog | \ sed '2,$s/^\([^ ]\)/\n\1/' fi } first="" for path in $PATHS; do if [ -z "$DO_CL" ]; then echo "$(get_list "$path" | sed "s:^\./::")" else for package in $(get_list "$path"); do [ -z "$first" ] || echo -e "\n====================\n" first=1 print_cl "$package" done fi done