File: copy_dates.sh

package info (click to toggle)
lcov 2.3.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,412 kB
  • sloc: perl: 27,615; xml: 6,982; sh: 6,977; python: 1,147; makefile: 593; cpp: 455; ansic: 167
file content (38 lines) | stat: -rwxr-xr-x 1,137 bytes parent folder | download
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
#!/usr/bin/env bash
#
# Usage: copy_dates.sh SOURCE TARGET
#
# For each file found in SOURCE, set the modification time of the copy of that
# file in TARGET to either the time of the latest Git commit (if SOURCE contains
# a Git repository and the file was not modified after the last commit), or the
# modification time of the original file.

SOURCE="$1"
TARGET="$2"

if [ -z "$SOURCE" -o -z "$TARGET" ] ; then
	echo "Usage: $0 SOURCE TARGET" >&2
	exit 1
fi

[ -d "$SOURCE/.git" ] ; NOGIT=$?

if [[ -n "$V" ]] && [[ "$V" -gt 0 ]] ; then
	echo "Copying modification/commit times from $SOURCE to $TARGET"
fi

cd "$SOURCE" || exit 1
find * -type f | while read FILENAME ; do
	[ ! -e "$TARGET/$FILENAME" ] && continue

	# Copy modification time
	touch -m "$TARGET/$FILENAME" -r "$FILENAME"

	[ $NOGIT -eq 1 ] && continue				# No Git
	git diff --quiet -- "$FILENAME" || continue		# Modified
	git diff --quiet --cached -- "$FILENAME" || continue	# Modified

	# Apply modification time from Git commit time
	TIME=$(git log --pretty=format:%cd -n 1 --date=iso -- "$FILENAME")
	[ -n "$TIME" ] && touch -m "$TARGET/$FILENAME" --date "$TIME"
done