tangetools/gitdiffdir/gitdiffdir
2024-08-06 01:06:11 +02:00

88 lines
1.6 KiB
Bash
Executable file

#!/bin/bash
: <<=cut
=pod
=head1 NAME
gitdiffdir - git diff, but between two dirs in different repositories
=head1 SYNOPSIS
gitdiffdir dir1 dir2
=head1 DESCRIPTION
B<git diff> only looks at tracked files. B<git diff dir1 dir2>
includes all untracked files.
B<gitdiffdir> tries to simulate B<git diff> but on two dirs in
different repositories.
=head1 EXAMPLES
Diff dirs with the same name:
gitdiffdir myproject/mydir1 myoldproject/mydir1
Diff dirs with the different names:
gitdiffdir myproject/mydir1 myoldproject/mydir2
=head1 AUTHOR
Copyright (C) 2024 Ole Tange,
http://ole.tange.dk and Free Software Foundation, Inc.
=head1 LICENSE
Copyright (C) 2012 Free Software Foundation, Inc.
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 3 of the License, or
at your option any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
=head1 DEPENDENCIES
B<gitdiffdir> uses B<git>, B<parallel>, B<sort>.
=head1 SEE ALSO
B<git>
=cut
dirA="$1"
dirB="$2"
stdout() {
if [ -t 1 ] ; then
# STDOUT = terminal
# use less
less
else
cat
fi
}
parallel -0 'cd {} && git ls-files' ::: "$dirA" "$dirB" | sort -u |
parallel -q diff -Naur "$dirA"/{} "$dirB"/{} | stdout