mirror of
https://github.com/mangosfour/server.git
synced 2025-12-15 01:37:00 +00:00
Fixed finding sql updates
This commit is contained in:
parent
acb5080733
commit
dcb4d9d6d5
1 changed files with 37 additions and 10 deletions
|
|
@ -4,6 +4,7 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <set>
|
||||||
#include "../../src/framework/Platform/CompilerDefs.h"
|
#include "../../src/framework/Platform/CompilerDefs.h"
|
||||||
|
|
||||||
#if PLATFORM == PLATFORM_WINDOWS
|
#if PLATFORM == PLATFORM_WINDOWS
|
||||||
|
|
@ -23,6 +24,7 @@
|
||||||
#define MAX_PATH 2048
|
#define MAX_PATH 2048
|
||||||
#define MAX_BUF 2048
|
#define MAX_BUF 2048
|
||||||
#define MAX_CMD 2048
|
#define MAX_CMD 2048
|
||||||
|
#define MAX_HASH 256
|
||||||
|
|
||||||
// config
|
// config
|
||||||
|
|
||||||
|
|
@ -50,6 +52,9 @@ char head_message[MAX_MSG];
|
||||||
char path_prefix[MAX_PATH] = "";
|
char path_prefix[MAX_PATH] = "";
|
||||||
char buffer[MAX_BUF];
|
char buffer[MAX_BUF];
|
||||||
char cmd[MAX_CMD];
|
char cmd[MAX_CMD];
|
||||||
|
char origin_hash[MAX_HASH];
|
||||||
|
|
||||||
|
std::set<std::string> sql_updates;
|
||||||
|
|
||||||
FILE *cmd_pipe;
|
FILE *cmd_pipe;
|
||||||
|
|
||||||
|
|
@ -127,9 +132,8 @@ bool check_fwd()
|
||||||
if( (cmd_pipe = popen( cmd, "r" )) == NULL )
|
if( (cmd_pipe = popen( cmd, "r" )) == NULL )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
char hash[256];
|
|
||||||
if(!fgets(buffer, MAX_BUF, cmd_pipe)) return false;
|
if(!fgets(buffer, MAX_BUF, cmd_pipe)) return false;
|
||||||
strncpy(hash, buffer, MAX_BUF);
|
strncpy(origin_hash, buffer, MAX_HASH);
|
||||||
pclose(cmd_pipe);
|
pclose(cmd_pipe);
|
||||||
|
|
||||||
if( (cmd_pipe = popen( "git log --pretty=\"format:%H\"", "r" )) == NULL )
|
if( (cmd_pipe = popen( "git log --pretty=\"format:%H\"", "r" )) == NULL )
|
||||||
|
|
@ -139,7 +143,7 @@ bool check_fwd()
|
||||||
while(fgets(buffer, MAX_BUF, cmd_pipe))
|
while(fgets(buffer, MAX_BUF, cmd_pipe))
|
||||||
{
|
{
|
||||||
buffer[strnlen(buffer, MAX_BUF) - 1] = '\0';
|
buffer[strnlen(buffer, MAX_BUF) - 1] = '\0';
|
||||||
if(strncmp(hash, buffer, MAX_BUF) == 0)
|
if(strncmp(origin_hash, buffer, MAX_BUF) == 0)
|
||||||
{
|
{
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
|
|
@ -266,16 +270,41 @@ bool amend_commit()
|
||||||
bool find_sql_updates()
|
bool find_sql_updates()
|
||||||
{
|
{
|
||||||
printf("+ finding sql updates on HEAD\n");
|
printf("+ finding sql updates on HEAD\n");
|
||||||
snprintf(cmd, MAX_CMD, "git ls-tree HEAD %s%s/", path_prefix, sql_update_dir);
|
// add all updates from HEAD
|
||||||
|
snprintf(cmd, MAX_CMD, "git show HEAD:%s", sql_update_dir);
|
||||||
if( (cmd_pipe = popen( cmd, "r" )) == NULL )
|
if( (cmd_pipe = popen( cmd, "r" )) == NULL )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
int dummy;
|
// skip first two lines
|
||||||
char hash[256], filename[MAX_PATH];
|
if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; }
|
||||||
|
if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; }
|
||||||
|
|
||||||
|
int nr;
|
||||||
|
char db_table[MAX_BUF];
|
||||||
|
|
||||||
while(fgets(buffer, MAX_BUF, cmd_pipe))
|
while(fgets(buffer, MAX_BUF, cmd_pipe))
|
||||||
{
|
{
|
||||||
sscanf(buffer, "%d tree %s %s", &dummy, hash, filename);
|
buffer[strnlen(buffer, MAX_BUF) - 1] = '\0';
|
||||||
|
if(sscanf(buffer, "%d_%s.sql", &nr, db_table) == 2)
|
||||||
|
sql_updates.insert(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
pclose(cmd_pipe);
|
||||||
|
|
||||||
|
// remove updates from the last commit also found on origin
|
||||||
|
snprintf(cmd, MAX_CMD, "git show %s:%s", origin_hash, sql_update_dir);
|
||||||
|
if( (cmd_pipe = popen( cmd, "r" )) == NULL )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// skip first two lines
|
||||||
|
if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; }
|
||||||
|
if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; }
|
||||||
|
|
||||||
|
while(fgets(buffer, MAX_BUF, cmd_pipe))
|
||||||
|
{
|
||||||
|
buffer[strnlen(buffer, MAX_BUF) - 1] = '\0';
|
||||||
|
if(sscanf(buffer, "%d_%s.sql", &nr, db_table) == 2)
|
||||||
|
sql_updates.erase(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
pclose(cmd_pipe);
|
pclose(cmd_pipe);
|
||||||
|
|
@ -322,11 +351,9 @@ int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
DO( find_origin() );
|
DO( find_origin() );
|
||||||
if(do_fetch)
|
if(do_fetch)
|
||||||
{
|
|
||||||
DO( fetch_origin() );
|
DO( fetch_origin() );
|
||||||
DO( check_fwd() );
|
DO( check_fwd() );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
DO( find_rev() );
|
DO( find_rev() );
|
||||||
DO( find_head_msg() );
|
DO( find_head_msg() );
|
||||||
if(do_sql)
|
if(do_sql)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue