浏览代码

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

Signed-off-by: Euphy <euphy@rathena.org>
Euphy 12 年之前
父节点
当前提交
f919ac05af
共有 4 个文件被更改,包括 56 次插入10 次删除
  1. 38 3
      src/common/core.c
  2. 4 1
      src/common/core.h
  3. 10 2
      src/map/pc.c
  4. 4 4
      src/map/script.c

+ 38 - 3
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)

+ 4 - 1
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);

+ 10 - 2
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);
 		}
 

+ 4 - 4
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;
 }