Реализовал базовые функции генератора журнала изменений
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:
parent
9ad7523e7c
commit
f68cd75600
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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user