diff --git a/src/common/core.c b/src/common/core.c index 89e6b67daa..7bbe3a6fb9 100644 --- a/src/common/core.c +++ b/src/common/core.c @@ -245,17 +245,49 @@ const char* get_svn_revision(void) { } // fallback - snprintf(svn_version_buffer, sizeof(svn_version_buffer), "Unknown"); + svn_version_buffer[0] = UNKNOWN_VERSION; return svn_version_buffer; } #endif +// GIT path +#define GIT_ORIGIN "refs/remotes/origin/master" + +// Grabs the hash from the last time the user updated their working copy (last pull) +const char *get_git_hash (void) { + static char GitHash[41] = ""; //Sha(40) + 1 + FILE *fp; + + if( GitHash[0] != '\0' ) + return GitHash; + + if( (fp = fopen(".git/"GIT_ORIGIN, "r")) != NULL ) { + char line[64]; + char *rev = malloc(sizeof(char) * 50); + + if( fgets(line, sizeof(line), fp) && sscanf(line, "%s", rev) ) + snprintf(GitHash, sizeof(GitHash), "%s", rev); + + free(rev); + fclose(fp); + } else { + GitHash[0] = UNKNOWN_VERSION; + } + + if ( !(*GitHash) ) { + GitHash[0] = UNKNOWN_VERSION; + } + + return GitHash; +} + /*====================================== * CORE : Display title * ASCII By CalciumKid 1/12/2011 *--------------------------------------*/ static void display_title(void) { - //ClearScreen(); // clear screen and go up/left (0, 0 position in text) + const char* svn = get_svn_revision(); + const char* git = get_git_hash(); ShowMessage("\n"); ShowMessage(""CL_PASS" "CL_BOLD" "CL_PASS""CL_CLL""CL_NORMAL"\n"); @@ -269,7 +301,10 @@ static void display_title(void) { ShowMessage(""CL_PASS" "CL_GREEN" http://rathena.org/board/ "CL_PASS""CL_CLL""CL_NORMAL"\n"); ShowMessage(""CL_PASS" "CL_BOLD" "CL_PASS""CL_CLL""CL_NORMAL"\n"); - ShowInfo("SVN Revision: '"CL_WHITE"%s"CL_RESET"'.\n", get_svn_revision()); + if( svn[0] != UNKNOWN_VERSION ) + ShowInfo("SVN Revision: '"CL_WHITE"%s"CL_RESET"'\n", svn); + else if( git[0] != UNKNOWN_VERSION ) + ShowInfo("Git Hash: '"CL_WHITE"%s"CL_RESET"'\n", git); } // Warning if executed as superuser (root) diff --git a/src/common/core.h b/src/common/core.h index f619d821f2..ab3ef3ed04 100644 --- a/src/common/core.h +++ b/src/common/core.h @@ -16,6 +16,8 @@ extern char **arg_v; extern int buildbotflag; #endif +#define UNKNOWN_VERSION '\x02' + /// @see E_CORE_ST extern int runflag; extern char *SERVER_NAME; @@ -31,7 +33,8 @@ enum { extern char SERVER_TYPE; extern int parse_console(const char* buf); -extern const char *get_svn_revision(void); +const char *get_svn_revision(void); +const char *get_git_hash(void); extern int do_init(int,char**); extern void set_server_type(void); extern void do_abort(void); diff --git a/src/map/pc.c b/src/map/pc.c index 5b0bc1819a..b363375cee 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1067,9 +1067,17 @@ bool pc_authok(struct map_session_data *sd, int login_id2, time_t expiration_tim if( !changing_mapservers ) { - if (battle_config.display_version == 1){ + if (battle_config.display_version == 1) { + const char* svn = get_svn_revision(); + const char* git = get_git_hash(); char buf[256]; - sprintf(buf, "SVN version: %s", get_svn_revision()); + + if( svn[0] != UNKNOWN_VERSION ) + sprintf(buf,"SVN Revision: %s", svn); + else if( git[0] != UNKNOWN_VERSION ) + sprintf(buf,"Git Hash: %s", git); + else + sprintf(buf,"Unknown Version"); clif_displaymessage(sd->fd, buf); } diff --git a/src/map/script.c b/src/map/script.c index 1eb717b017..b226801f5b 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -17105,12 +17105,12 @@ BUILDIN_FUNC(is_function) { * get_revision() -> retrieves the current svn revision (if available) **/ BUILDIN_FUNC(get_revision) { - const char * revision; + const char *svn = get_svn_revision(); - if ( (revision = get_svn_revision()) != 0 ) - script_pushint(st,atoi(revision)); + if ( svn[0] != UNKNOWN_VERSION ) + script_pushint(st,atoi(svn)); else - script_pushint(st,-1);//unknown + script_pushint(st,-1); //unknown return 0; }