* Added support for GIT hashes. (credits: Ind, Trojal)

Signed-off-by: Euphy <euphy@rathena.org>
This commit is contained in:
Euphy 2013-07-18 02:30:05 -04:00
parent 3beb7833f9
commit f919ac05af
4 changed files with 56 additions and 10 deletions

View File

@ -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)

View File

@ -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);

View File

@ -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);
}

View File

@ -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;
}