xref: /linux/scripts/package/gen-diff-patch (revision a3a02a52bcfcbcc4a637d4b68bf1bc391c9fad02)
1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0-only
3
4set -eu
5
6diff_patch=$1
7
8mkdir -p "$(dirname "${diff_patch}")"
9
10git -C "${srctree:-.}" diff HEAD > "${diff_patch}"
11
12if [ ! -s "${diff_patch}" ] ||
13   [ -z "$(git -C "${srctree:-.}" ls-files --other --exclude-standard | head -n1)" ]; then
14	exit
15fi
16
17# The source tarball, which is generated by 'git archive', contains everything
18# you committed in the repository. If you have local diff ('git diff HEAD'),
19# it will go into ${diff_patch}. If untracked files are remaining, the resulting
20# source package may not be correct.
21#
22# Examples:
23#  - You modified a source file to add #include "new-header.h"
24#    but forgot to add new-header.h
25#  - You modified a Makefile to add 'obj-$(CONFIG_FOO) += new-dirver.o'
26#    but you forgot to add new-driver.c
27#
28# You need to commit them, or at least stage them by 'git add'.
29#
30# This script does not take care of untracked files because doing so would
31# introduce additional complexity. Instead, print a warning message here if
32# untracked files are found.
33# If all untracked files are just garbage, you can ignore this warning.
34echo >&2 "============================ WARNING ============================"
35echo >&2 "Your working tree has diff from HEAD, and also untracked file(s)."
36echo >&2 "Please make sure you did 'git add' for all new files you need in"
37echo >&2 "the source package."
38echo >&2 "================================================================="
39