mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 00:28:52 +02:00 
			
		
		
		
	setlocalversion: use only the correct release tag for git-describe
Currently, setlocalversion uses any annotated tag for git-describe. If we are at a tagged commit, it will not append the commit hash. $ git checkout v6.2-rc1^ $ make -s defconfig kernelrelease 6.1.0-14595-g292a089d78d3 $ git tag -a foo -m foo $ make -s kernelrelease 6.1.0 If a local tag 'foo' exists, it pretends to be a released version '6.1.0', while there are many commits on top of it. The output should be consistent irrespective of such a local tag. Pass the correct release tag to --match option of git-describe. In the mainline kernel, the SUBLEVEL is always '0', which is omitted from the tag. KERNELVERSION annotated tag 6.1.0 -> v6.1 (mainline) 6.2.0-rc5 -> v6.2-rc5 (mainline, release candidate) 6.1.7 -> v6.1.7 (stable) To preserve the behavior in linux-next, use the tag derived from localversion* files if exists. In linux-next, the local version is specified by the localversion-next file. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
This commit is contained in:
		
							parent
							
								
									eed36d7751
								
							
						
					
					
						commit
						6ab7e1f95e
					
				
					 1 changed files with 20 additions and 7 deletions
				
			
		|  | @ -27,6 +27,7 @@ fi | ||||||
| scm_version() | scm_version() | ||||||
| { | { | ||||||
| 	local short | 	local short | ||||||
|  | 	local tag | ||||||
| 	short=false | 	short=false | ||||||
| 
 | 
 | ||||||
| 	cd "$srctree" | 	cd "$srctree" | ||||||
|  | @ -42,9 +43,21 @@ scm_version() | ||||||
| 		return | 		return | ||||||
| 	fi | 	fi | ||||||
| 
 | 
 | ||||||
| 	# If we are at a tagged commit (like "v2.6.30-rc6"), we ignore it | 	# If a localversion*' file and the corresponding annotated tag exist, | ||||||
| 	# because this version is defined in the top level Makefile. | 	# use it. This is the case in linux-next. | ||||||
| 	if [ -z "$(git describe --exact-match 2>/dev/null)" ]; then | 	tag=${file_localversion#-} | ||||||
|  | 	tag=$(git describe --exact-match --match=$tag $tag 2>/dev/null) | ||||||
|  | 
 | ||||||
|  | 	# Otherwise, default to the annotated tag derived from KERNELVERSION. | ||||||
|  | 	#   mainline kernel:  6.2.0-rc5  ->  v6.2-rc5 | ||||||
|  | 	#   stable kernel:    6.1.7      ->  v6.1.7 | ||||||
|  | 	if [ -z "${tag}" ]; then | ||||||
|  | 		tag=v$(echo "${KERNELVERSION}" | sed -E 's/^([0-9]+\.[0-9]+)\.0(.*)$/\1\2/') | ||||||
|  | 	fi | ||||||
|  | 
 | ||||||
|  | 	# If we are at the tagged commit, we ignore it because the version is | ||||||
|  | 	# well-defined. | ||||||
|  | 	if [ -z "$(git describe --exact-match --match=$tag 2>/dev/null)" ]; then | ||||||
| 
 | 
 | ||||||
| 		# If only the short version is requested, don't bother | 		# If only the short version is requested, don't bother | ||||||
| 		# running further git commands | 		# running further git commands | ||||||
|  | @ -52,9 +65,9 @@ scm_version() | ||||||
| 			echo "+" | 			echo "+" | ||||||
| 			return | 			return | ||||||
| 		fi | 		fi | ||||||
| 		# If we are past a tagged commit (like | 		# If we are past the tagged commit, we pretty print it. | ||||||
| 		# "v2.6.30-rc5-302-g72357d5"), we pretty print it. | 		# (like 6.1.0-14595-g292a089d78d3) | ||||||
| 		if atag="$(git describe 2>/dev/null)"; then | 		if atag="$(git describe --match=$tag 2>/dev/null)"; then | ||||||
| 			echo "$atag" | awk -F- '{printf("-%05d", $(NF-1))}' | 			echo "$atag" | awk -F- '{printf("-%05d", $(NF-1))}' | ||||||
| 		fi | 		fi | ||||||
| 
 | 
 | ||||||
|  | @ -116,7 +129,7 @@ fi | ||||||
| # version string from CONFIG_LOCALVERSION | # version string from CONFIG_LOCALVERSION | ||||||
| config_localversion=$(sed -n 's/^CONFIG_LOCALVERSION=\(.*\)$/\1/p' include/config/auto.conf) | config_localversion=$(sed -n 's/^CONFIG_LOCALVERSION=\(.*\)$/\1/p' include/config/auto.conf) | ||||||
| 
 | 
 | ||||||
| # scm version string if not at a tagged commit | # scm version string if not at the kernel version tag or at the file_localversion | ||||||
| if grep -q "^CONFIG_LOCALVERSION_AUTO=y$" include/config/auto.conf; then | if grep -q "^CONFIG_LOCALVERSION_AUTO=y$" include/config/auto.conf; then | ||||||
| 	# full scm version string | 	# full scm version string | ||||||
| 	scm_version="$(scm_version)" | 	scm_version="$(scm_version)" | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Masahiro Yamada
						Masahiro Yamada