# -*- tcl -*- # Maintenance Instruction: leave the 999999.xxx.x as is and use 'pmix make' or src/make.tcl to update from -buildversion.txt # # Please consider using a BSD or MIT style license for greatest compatibility with the Tcl ecosystem. # Code using preferred Tcl licenses can be eligible for inclusion in Tcllib, Tklib and the punk package repository. # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ #Copyright (c) 2023 Julian Noble #Copyright (c) 2012-2018 Andreas Kupries # - code from A.K's 'kettle' project used in this module # # @@ Meta Begin # Application punk::repo 999999.0a1.0 # Meta platform tcl # Meta license BSD # @@ Meta End # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ ## Requirements ##e.g package require frobz # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ namespace eval punk::repo { proc is_fossil {{path {}}} { if {$path eq {}} { set path [pwd] } return [expr {[find_fossil $path] ne {}}] } proc is_git {{path {}}} { if {$path eq {}} { set path [pwd] } return [expr {[find_git $path] ne {}}] } proc find_fossil {{path {}}} { if {$path eq {}} { set path [pwd] } scanup $path is_fossil_root } proc find_git {{path {}}} { if {$path eq {}} { set path [pwd] } scanup $path is_git_root } proc is_fossil_root {{path {}}} { if {$path eq {}} { set path [pwd] } #from kettle::path::is.fossil foreach control { _FOSSIL_ .fslckout .fos } { set control $path/$control if {[file exists $control] && [file isfile $control]} {return 1} } return 0 } proc is_git_root {{path {}}} { if {$path eq {}} { set path [pwd] } set control $path/.git expr {[file exists $control] && [file isdirectory $control]} } proc git_revision {{path {}}} { if {$path eq {}} { set path [pwd] } # ::kettle::path::revision.git do_in_path $path { try { set v [::exec {*}[auto_execok git] describe] } on error {e o} { set v [lindex [split [dict get $o -errorinfo] \n] 0] } } return [string trim $v] } proc fossil_revision {{path {}}} { if {$path eq {}} { set path [pwd] } # ::kettle::path::revision.fossil set fossilcmd [auto_execok fossil] if {[llength $fossilcmd]} { do_in_path $path { set info [::exec {*}$fossilcmd info] } return [lindex [grep {checkout:*} $info] 0 1] } else { return Unknown } } #temporarily cd to workpath to run script - return to correct path even on failure proc do_in_path {path script} { #from ::kettle::path::in set here [pwd] try { cd $path uplevel 1 $script } finally { cd $here } } proc scanup {path cmd} { if {$path eq {}} { set path [pwd] } #based on kettle::path::scanup set path [file normalize $path] while {1} { # Found the proper directory, per the predicate. if {[{*}$cmd $path]} { return $path } # Not found, walk to parent set new [file dirname $path] # Stop when reaching the root. if {$new eq $path} { return {} } if {$new eq {}} { return {} } # Ok, truly walk up. set path $new } return {} } proc grep {pattern data} { set data [string map [list \r\n \n] $data] return [lsearch -all -inline -glob [split $data \n] $pattern] } proc rgrep {pattern data} { set data [string map [list \r\n \n] $data] return [lsearch -all -inline -regexp [split $data \n] $pattern] } interp alias {} is_fossil {} ::punk::repo::is_fossil interp alias {} is_fossil_root {} ::punk::repo::is_fossil_root interp alias {} find_fossil {} ::punk::repo::find_fossil interp alias {} fossil_revision {} ::punk::repo::fossil_revision interp alias {} is_git {} ::punk::repo::is_git interp alias {} is_git_root {} ::punk::repo::is_git_root interp alias {} find_git {} ::punk::repo::find_git interp alias {} git_revision {} ::punk::repo::git_revision interp alias {} gs {} git status -sb interp alias {} gr {} ::punk::repo::git_revision interp alias {} gl {} git log --oneline --decorate ;#decorate so stdout consistent with what we see on console interp alias {} glast {} git log -1 HEAD --stat interp alias {} gconf {} git config --global -l } # ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ ## Ready package provide punk::repo [namespace eval punk::repo { variable version set version 999999.0a1.0 }] return