launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #23416
[Merge] lp:~cjwatson/launchpad/find-changed-files-git into lp:launchpad
Colin Watson has proposed merging lp:~cjwatson/launchpad/find-changed-files-git into lp:launchpad.
Commit message:
Add Git support to utilities/find-changed-files.sh.
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
For more details, see:
https://code.launchpad.net/~cjwatson/launchpad/find-changed-files-git/+merge/364441
--
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~cjwatson/launchpad/find-changed-files-git into lp:launchpad.
=== modified file 'utilities/find-changed-files.sh'
--- utilities/find-changed-files.sh 2011-10-14 14:15:52 +0000
+++ utilities/find-changed-files.sh 2019-03-14 13:44:56 +0000
@@ -1,45 +1,73 @@
#!/bin/bash
#
-# Copyright 2009-2010 Canonical Ltd. This software is licensed under the
+# Copyright 2009-2019 Canonical Ltd. This software is licensed under the
# GNU Affero General Public License version 3 (see the file LICENSE).
#
-# Determine the changed files in Bazaar piplines, looms and plain branches.
-
-bzr() {
- # PYTHONPATH may point to the ./lib directory in the launchpad tree. This
- # directory includes a bzrlib. When this script calls bzr, we want it to
- # use the system bzrlib, not the one in the launchpad tree.
- PYTHONPATH='' `which bzr` "$@"
-}
-
-bzr diff > /dev/null
-diff_status=$?
-if [ $diff_status -eq 0 ] ; then
- # No uncommitted changes in the tree.
- bzr status | grep "^Current thread:" > /dev/null
- if [ $? -eq 0 ] ; then
- # This is a loom, lint changes relative to the lower thread.
- rev_option="-r thread:"
- elif [ "$(bzr pipes | sed -n -e "/^\\*/q;p" | wc -l)" -gt 0 ]; then
- # This is a pipeline with at least one pipe before the
- # current, lint changes relative to the previous pipe
- rev_option="-r ancestor::prev"
+# Determine the changed files in the working tree, or if the working tree is
+# clean then the changed files relative to the parent branch.
+
+set -e
+set -o pipefail
+
+if [ -d .git ]; then
+ git_diff_files() {
+ git diff --numstat -z $@ | perl -l -0 -ne '
+ # Remove leading added/deleted line counts.
+ s/^[0-9]+\t[0-9]+\t//;
+ # If this entry shows a rename or a copy, then extract the
+ # destination path.
+ if (/^$/) { <>; $_ = <>; chomp }
+ # Only show paths that exist and are not symlinks.
+ print if -e and not -l'
+ }
+
+ files=$(git_diff_files HEAD)
+ if [ -z "$files" ]; then
+ # git doesn't give us a way to track the parent branch, so just use
+ # master by default and let the user override that using a
+ # positional argument.
+ files=$(git_diff_files "${1:-master}")
+ fi
+elif [ -d .bzr ]; then
+ bzr() {
+ # PYTHONPATH may point to the ./lib directory in the launchpad tree.
+ # This directory includes a bzrlib. When this script calls bzr, we
+ # want it to use the system bzrlib, not the one in the launchpad
+ # tree.
+ PYTHONPATH='' `which bzr` "$@"
+ }
+
+ diff_status=0
+ bzr diff > /dev/null || diff_status=$?
+ if [ $diff_status -eq 0 ] ; then
+ # No uncommitted changes in the tree.
+ bzr status | grep "^Current thread:" > /dev/null
+ if [ $? -eq 0 ] ; then
+ # This is a loom, lint changes relative to the lower thread.
+ rev_option="-r thread:"
+ elif [ "$(bzr pipes | sed -n -e "/^\\*/q;p" | wc -l)" -gt 0 ]; then
+ # This is a pipeline with at least one pipe before the
+ # current, lint changes relative to the previous pipe
+ rev_option="-r ancestor::prev"
+ else
+ # Lint changes relative to the parent.
+ rev=`bzr info | sed \
+ '/parent branch:/!d; s/ *parent branch: /ancestor:/'`
+ rev_option="-r $rev"
+ fi
+ elif [ $diff_status -eq 1 ] ; then
+ # Uncommitted changes in the tree, return those files.
+ rev_option=""
else
- # Lint changes relative to the parent.
- rev=`bzr info | sed \
- '/parent branch:/!d; s/ *parent branch: /ancestor:/'`
- rev_option="-r $rev"
+ # bzr diff failed
+ exit 1
fi
-elif [ $diff_status -eq 1 ] ; then
- # Uncommitted changes in the tree, return those files.
- rev_option=""
+ # Extract filename from status line. Skip symlinks.
+ files=`bzr st --short $rev_option |
+ sed -e '/^.[MN]/!d; s/.* //' -e '/@$/d'`
else
- # bzr diff failed
+ echo "Not in a Git or Bazaar working tree" >&2
exit 1
fi
-# Extract filename from status line. Skip symlinks.
-files=`bzr st --short $rev_option |
- sed -e '/^.[MN]/!d; s/.* //' -e '/@$/d'`
echo $files
-
Follow ups