Реализовал базовые функции генератора журнала изменений
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
				
			This commit is contained in:
		
							
								
								
									
										141
									
								
								changelog-gen.tcl
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										141
									
								
								changelog-gen.tcl
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,141 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
# Tcl ignores the next line -*- tcl -*- \
 | 
			
		||||
exec tclsh "$0" -- "$@"
 | 
			
		||||
 | 
			
		||||
######################################################################
 | 
			
		||||
#                ProjMan 2
 | 
			
		||||
#        Distributed under GNU Public License
 | 
			
		||||
# Author: Sergey Kalinin svk@nuk-svk.ru
 | 
			
		||||
# Copyright (c) "SVK", 2024, https://nuk-svk.ru
 | 
			
		||||
#######################################################################
 | 
			
		||||
# Changelog generator from the Git commit history.
 | 
			
		||||
# For DEB and RPM packages
 | 
			
		||||
# usage a git command:
 | 
			
		||||
# 
 | 
			
		||||
#    git log --abbrev-commit --all --pretty='%h, %ad, %an, %ae, %s, %b'
 | 
			
		||||
#######################################################################
 | 
			
		||||
 | 
			
		||||
# puts $tcl_platform(platform)
 | 
			
		||||
 | 
			
		||||
# Use whereis command for finding the git executable file.
 | 
			
		||||
# for unix-like operating systems
 | 
			
		||||
proc GetGitCommandUnix {} {
 | 
			
		||||
    global gitCommand
 | 
			
		||||
    set cmd "whereis -b git"
 | 
			
		||||
    catch "exec $cmd" result
 | 
			
		||||
    # puts $result
 | 
			
		||||
    if {$result ne ""} {
 | 
			
		||||
        set fields [split $result ":"]
 | 
			
		||||
        # puts $fields
 | 
			
		||||
        if {[lindex $fields 1] ne ""} {
 | 
			
		||||
            # puts [lindex $fields 1]
 | 
			
		||||
	        set gitCommand "[string trim [lindex $fields 1]]"
 | 
			
		||||
		} else {
 | 
			
		||||
            puts "GIT command not found"
 | 
			
		||||
            exit
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Setting the git-command for windows family OS
 | 
			
		||||
proc GetGitCommandWindows {} {
 | 
			
		||||
    global gitCommand
 | 
			
		||||
    set gitCommand "c:/git/bin/git.exe"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
switch $tcl_platform(platform) {
 | 
			
		||||
    unix     {GetGitCommandUnix}
 | 
			
		||||
    windows  {GetGitCommandWindows}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
proc ReadGitLog {} {
 | 
			
		||||
    global gitCommand
 | 
			
		||||
    set cmd exec
 | 
			
		||||
    lappend cmd "$gitCommand"
 | 
			
		||||
    lappend cmd "log"
 | 
			
		||||
    lappend cmd "--abbrev-commit"
 | 
			
		||||
    lappend cmd "--all"
 | 
			
		||||
    lappend cmd "--pretty='%h, %ad, %an, %ae, %s, %b'"
 | 
			
		||||
    # puts $cmd
 | 
			
		||||
    catch $cmd pipe
 | 
			
		||||
    # puts $pipe
 | 
			
		||||
    set outBuffer ""
 | 
			
		||||
    foreach line [split $pipe "\n"] {
 | 
			
		||||
        # set line [string trim $line]
 | 
			
		||||
        set line [string trim [string trim $line] {'}] 
 | 
			
		||||
        if {[regexp -nocase -all -- {^[0-9a-z]+} $line match]} {
 | 
			
		||||
            if {$outBuffer ne ""} {
 | 
			
		||||
                # puts $outBuffer
 | 
			
		||||
                lappend res $outBuffer
 | 
			
		||||
            }
 | 
			
		||||
            set outBuffer $line
 | 
			
		||||
        } else {
 | 
			
		||||
            if {$line ne ""} {
 | 
			
		||||
                append outBuffer ". " $line
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    # puts $res
 | 
			
		||||
    return $res
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
proc GenerateChangelogDEB {} {
 | 
			
		||||
    puts "GenerateChangelogDEB"
 | 
			
		||||
    set lastCommitTimeStamp ""
 | 
			
		||||
    set commiter ""
 | 
			
		||||
    set commitText ""
 | 
			
		||||
    # ReadGitLog
 | 
			
		||||
    set lst [lsort -decreasing [ReadGitLog]]
 | 
			
		||||
    # puts [lindex $lst 0]
 | 
			
		||||
    # exit
 | 
			
		||||
    foreach line $lst {
 | 
			
		||||
        set record [split $line ","]
 | 
			
		||||
        # puts [lindex $record 1]
 | 
			
		||||
        if {$lastCommitTimeStamp eq ""} {
 | 
			
		||||
            set lastCommitTimeStamp [string trim [lindex $record 1]]
 | 
			
		||||
        }
 | 
			
		||||
        # set timeStamp set s [clock scan {Mon Jan 22 17:30:28 2018 +0300}] -format {%a %b %e %H:%M:%S %Y %z”}
 | 
			
		||||
        
 | 
			
		||||
        if {$commiter ne [lindex $record 2]} {
 | 
			
		||||
            puts "\n \[ [string trim $commiter] \]"
 | 
			
		||||
            set commiter [lindex $record 2]
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        set commitTex [lindex $record 4]
 | 
			
		||||
        puts "  * $commitTex"
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    puts $lastCommitTimeStamp
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
proc GenerateChangelogRPM {} {
 | 
			
		||||
    puts "GenerateChangelogRPM"
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
proc GenerateChangelogTXT {} {
 | 
			
		||||
    puts "GenerateChangelogTXT"
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
# puts [ReadGitLog]
 | 
			
		||||
 | 
			
		||||
proc ShowHelp {} {
 | 
			
		||||
    puts "\nChangelog generator from the Git commit history. For DEB and RPM packages"
 | 
			
		||||
    puts "Usage:\n"
 | 
			
		||||
    puts "\tchangelog-gen.tcl {DEB RPM TXT}\n"
 | 
			
		||||
    puts "Where{DEB RPM TXT} - changelog format for same packages. The list can be either complete or from any number of elements.\nDefault is a TXT"    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if { $::argc > 1 } {
 | 
			
		||||
    foreach arg $::argv {
 | 
			
		||||
        switch -glob -nocase $arg {
 | 
			
		||||
            DEB {GenerateChangelogDEB}
 | 
			
		||||
            RPM {GenerateChangelogRPM}
 | 
			
		||||
            TXT {GenerateChangelogTXT}
 | 
			
		||||
            *help {ShowHelp}
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
} else {
 | 
			
		||||
    GenerateChangelogTXT
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
projman (2.0.0-alpha) stable; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Initial release
 | 
			
		||||
 | 
			
		||||
 -- Sergey Kalinin <svk@nuk-svk.ru>  Wed, 20 Jul 2022 16:56:31 +0300
 | 
			
		||||
 * Initial release
 | 
			
		||||
 
 | 
			
		||||
-- Sergey Kalinin <svk@nuk-svk.ru>  Wed, 20 Jul 2022 16:56:31 +0300
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user