From 7bceeeea67121a965562de7f34ff1b6dab172235 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Mon, 8 Apr 2013 15:03:00 +0200 Subject: [PATCH] 2013-04-08 14:57 UTC+0200 Viktor Szakats (harbour syenar.net) * commit.hb + made it work regardless of cwd + automatically add pre-commit hook command * check.hb * commit.hb * minor to root path forming --- ChangeLog.txt | 9 +++++++++ bin/check.hb | 2 +- bin/commit.hb | 32 ++++++++++++++++++++++++-------- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 0a3e586dc6..aa75b7c3fb 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -10,6 +10,15 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2013-04-08 14:57 UTC+0200 Viktor Szakats (harbour syenar.net) + * commit.hb + + made it work regardless of cwd + + automatically add pre-commit hook command + + * check.hb + * commit.hb + * minor to root path forming + 2013-04-08 13:41 UTC+0200 Viktor Szakats (harbour syenar.net) * contrib/hbpost.hbm * utils/hbmk2/pkg_inst.hbm diff --git a/bin/check.hb b/bin/check.hb index baa0451d1b..9983c85671 100644 --- a/bin/check.hb +++ b/bin/check.hb @@ -33,7 +33,7 @@ #include "directry.ch" -#define _HBROOT_ hb_DirBase() + hb_DirSepToOS( "../" ) /* must end with dirsep */ +#define _HBROOT_ hb_PathNormalize( hb_DirSepToOS( hb_DirBase() + "../" ) ) /* must end with dirsep */ FUNCTION CheckFileList( xName ) diff --git a/bin/commit.hb b/bin/commit.hb index 3755e96403..bf0214b362 100644 --- a/bin/commit.hb +++ b/bin/commit.hb @@ -32,6 +32,8 @@ #include "hbgtinfo.ch" +#define _COMMIT_HBROOT_ hb_PathNormalize( hb_DirSepToOS( hb_DirBase() + "../" ) ) /* must end with dirsep */ + PROCEDURE Main() LOCAL cVCS := VCSDetect() @@ -44,6 +46,8 @@ PROCEDURE Main() LOCAL cLogName LOCAL lWasChangeLog + InstallPreCommitHook() + IF Empty( aChanges ) OutStd( hb_ProgName() + ": " + "no changes" + hb_eol() ) ErrorLevel( 0 ) @@ -52,16 +56,16 @@ PROCEDURE Main() IF CheckFileList( aFiles ) - IF ! hb_FileExists( cLogName := "ChangeLog.txt" ) - IF ! hb_FileExists( cLogName := "ChangeLog" ) - OutStd( hb_ProgName() + ": " + "can't find ChangeLog file" + hb_eol() ) + IF ! hb_FileExists( cLogName := _COMMIT_HBROOT_ + "ChangeLog.txt" ) + IF ! hb_FileExists( cLogName := _COMMIT_HBROOT_ + "ChangeLog" ) + OutStd( hb_ProgName() + ": " + "cannot find ChangeLog file" + hb_eol() ) ErrorLevel( 2 ) RETURN ENDIF ENDIF IF "--check-only" $ hb_CmdLine() - IF AScan( aFiles, {| tmp | tmp == cLogName } ) == 0 + IF AScan( aFiles, {| tmp | tmp == hb_FNameNameExt( cLogName ) } ) == 0 OutStd( hb_ProgName() + ": " + hb_StrFormat( "%1$s not updated. Run 'hbrun bin/commit' and retry.", cLogName ) + hb_eol() ) ErrorLevel( 3 ) RETURN @@ -126,6 +130,18 @@ PROCEDURE Main() RETURN +STATIC FUNCTION InstallPreCommitHook() + + LOCAL cName := _COMMIT_HBROOT_ + hb_DirSepToOS( ".git/hooks/pre-commit" ) + LOCAL cFile := hb_MemoRead( cName ) + LOCAL cLine := "exec hbrun bin/commit --check-only" + + IF cLine $ cFile + RETURN .T. + ENDIF + + RETURN hb_MemoWrit( cName, cFile + hb_eol() + cLine + hb_eol() ) + STATIC FUNCTION GetLastEntry( cLog, /* @ */ nStart, /* @ */ nEnd ) LOCAL cLogHeaderExp := "\n[1-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9] UTC[\-+][0-1][0-9][0-5][0-9] [\S ]*" + hb_eol() @@ -176,7 +192,7 @@ STATIC FUNCTION MakeEntry( aChanges, cMyName, cLogName, lAllowChangeLog ) LOCAL cLine FOR EACH cLine IN aChanges - IF lAllowChangeLog .OR. !( SubStr( cLine, 5 ) == cLogName ) + IF lAllowChangeLog .OR. !( SubStr( cLine, 5 ) == hb_FNameNameExt( cLogName ) ) cLog += cLine + hb_eol() ENDIF NEXT @@ -192,7 +208,7 @@ STATIC FUNCTION IsLastEntryEmpty( cLog, cLogName, /* @ */ lChangeLog ) FOR EACH cLine IN hb_ATokens( StrTran( cLog, Chr( 13 ) ), Chr( 10 ) ) IF cLine:__enumIndex() != 1 IF Empty( Left( cLine, 2 ) ) .AND. ! Empty( SubStr( cLine, 3, 1 ) ) - IF SubStr( cLine, 5 ) == cLogName + IF SubStr( cLine, 5 ) == hb_FNameNameExt( cLogName ) lChangeLog := .T. ENDIF ELSE @@ -208,8 +224,8 @@ STATIC FUNCTION IsLastEntryEmpty( cLog, cLogName, /* @ */ lChangeLog ) STATIC FUNCTION VCSDetect() DO CASE - CASE hb_DirExists( ".svn" ) ; RETURN "svn" - CASE hb_DirExists( ".git" ) ; RETURN "git" + CASE hb_DirExists( _COMMIT_HBROOT_ + ".svn" ) ; RETURN "svn" + CASE hb_DirExists( _COMMIT_HBROOT_ + ".git" ) ; RETURN "git" ENDCASE RETURN ""