mirror of
https://github.com/reactos/reactos.git
synced 2025-02-20 15:35:04 +00:00
[LOG2LINES] Remove SVN leftovers
This commit is contained in:
parent
754e175d12
commit
6b0ddf6813
10 changed files with 1 additions and 482 deletions
|
@ -8,7 +8,6 @@ list(APPEND SOURCE
|
|||
log2lines.c
|
||||
match.c
|
||||
options.c
|
||||
revision.c
|
||||
stat.c
|
||||
util.c)
|
||||
|
||||
|
|
|
@ -101,48 +101,6 @@ handle_switch_str(FILE *outFile, char *sw, char *arg, char *desc)
|
|||
return changed;
|
||||
}
|
||||
|
||||
static int
|
||||
handle_switch_pstr(FILE *outFile, char **psw, char *arg, char *desc)
|
||||
{
|
||||
int changed =0;
|
||||
|
||||
if (arg)
|
||||
{
|
||||
if (strcmp(arg,"") != 0)
|
||||
{
|
||||
if (strcmp(arg,KDBG_ESC_OFF) == 0)
|
||||
{
|
||||
if (*psw)
|
||||
changed = 1;
|
||||
free(*psw);
|
||||
*psw = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!*psw)
|
||||
{
|
||||
*psw = malloc(LINESIZE);
|
||||
**psw = '\0';
|
||||
}
|
||||
|
||||
if (strcmp(arg, *psw) != 0)
|
||||
{
|
||||
strcpy(*psw, arg);
|
||||
changed = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (desc)
|
||||
{
|
||||
esclog(outFile, "%s is \"%s\" (%s)\n", desc, *psw, changed ? "changed":"unchanged");
|
||||
if (!arg)
|
||||
esclog(outFile, "(readonly)\n");
|
||||
}
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
static int
|
||||
handle_address_cmd(FILE *outFile, char *arg)
|
||||
{
|
||||
|
@ -257,36 +215,6 @@ handle_escape_cmd(FILE *outFile, char *Line)
|
|||
case 'r':
|
||||
handle_switch(outFile, &opt_raw, arg, "-r Raw");
|
||||
break;
|
||||
case 'R':
|
||||
changed = handle_switch_pstr(outFile, &opt_Revision, arg, NULL);
|
||||
opt_Revision_check = 0;
|
||||
if (opt_Revision)
|
||||
{
|
||||
opt_Revision_check = 1;
|
||||
if (strstr(opt_Revision, "check") == opt_Revision)
|
||||
{
|
||||
esclog(outFile, "-R is \"%s\" (%s)\n", opt_Revision, changed ? "changed":"unchanged");
|
||||
}
|
||||
else if (strstr(opt_Revision, "regscan") == opt_Revision)
|
||||
{
|
||||
char *s = strchr(opt_Revision, ',');
|
||||
|
||||
revinfo.range = DEF_RANGE;
|
||||
if (s)
|
||||
{
|
||||
*s++ = '\0';
|
||||
revinfo.range = atoi(s);
|
||||
}
|
||||
regscan(outFile);
|
||||
}
|
||||
else if (strstr(opt_Revision, "regclear") == opt_Revision)
|
||||
{
|
||||
list_clear(&sources);
|
||||
summ.regfound = 0;
|
||||
esclog(outFile, "cleared regression scan results\n");
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 's':
|
||||
if (strcmp(arg,"clear") == 0)
|
||||
{
|
||||
|
@ -302,7 +230,6 @@ handle_escape_cmd(FILE *outFile, char *Line)
|
|||
{
|
||||
handle_switch(outFile, &opt_undo, "1", "-u Undo");
|
||||
handle_switch(outFile, &opt_redo, "1", "-U Undo and reprocess");
|
||||
opt_Revision_check = 1;
|
||||
}
|
||||
esclog(outFile, "-S Sources option is %d+%d,\"%s\"\n", opt_Source, opt_SrcPlus, opt_SourcesPath);
|
||||
esclog(outFile, "(Setting source tree not implemented)\n");
|
||||
|
|
|
@ -5,10 +5,6 @@
|
|||
#define INVALID_BASE 0xFFFFFFFFL
|
||||
|
||||
#define LOGBOTTOM "--------"
|
||||
#define SVNDB "svndb.log"
|
||||
#define SVNDB_INX "svndb.inx"
|
||||
#define DEF_RANGE 500
|
||||
#define MAGIC_INX 0x494E585F //'INX_'
|
||||
#define DEF_OPT_DIR "output-i386"
|
||||
#define SOURCES_ENV "_ROSBE_ROSSOURCEDIR"
|
||||
#define CACHEFILE "log2lines.cache"
|
||||
|
|
|
@ -64,35 +64,6 @@ char *verboseUsage =
|
|||
" - Input file redirection.\n"
|
||||
" - Pipelining byte streams, needed for the -c option.\n\n"
|
||||
" -r Raw output without translation.\n\n"
|
||||
" -R <cmd>\n"
|
||||
" Revision commands interfacing with SVN. <cmd> is one of:\n"
|
||||
" - check:\n"
|
||||
" To be combined with -S. Check each source file in the log and issue\n"
|
||||
" a warning if its revision is higher than that of the tested build.\n"
|
||||
" Also when the revison of the source tree is lower than that of the\n"
|
||||
" tested build (for every source file).\n"
|
||||
" In both cases the source file's -S output would be unreliable.\n"
|
||||
" - update:\n"
|
||||
" Updates the SVN log file. Currently only generates the index file\n"
|
||||
" The SVN log file itself must be generated by hand in the sources\n"
|
||||
" directory like this (-v is mandatory here):\n"
|
||||
" svn log -v > svndb.log ('svn log' accepts also a range)\n"
|
||||
" 'svndb.log' and its index are needed for '-R regscan'\n"
|
||||
" - regscan[,<range>]:\n"
|
||||
" Scan for regression candidates. Essentially it tries to find\n"
|
||||
" matches between the SVN log entries and the sources hit by\n"
|
||||
" a backtrace (bt) command.\n"
|
||||
" <range> is the amount of revisions to look back from the build\n"
|
||||
" revision (default 500)\n"
|
||||
" The output of '-R regscan' is printed after EOF. The 'Changed path'\n"
|
||||
" lists will contain only matched files.\n"
|
||||
" Limitations:\n"
|
||||
" - The bug should really be a regression.\n"
|
||||
" - Expect a number of false positives.\n"
|
||||
" - The offending change must be in the sources hit by the backtrace.\n"
|
||||
" This mostly excludes changes in headerfiles for example.\n"
|
||||
" - Must be combined with -S.\n"
|
||||
" Can be combined with -tTS.\n\n"
|
||||
" -s Statistics. A summary with the following info is printed after EOF:\n"
|
||||
" *** LOG2LINES SUMMARY ***\n"
|
||||
" - Translated: Translated lines.\n"
|
||||
|
@ -149,8 +120,6 @@ char *verboseUsage =
|
|||
" - Do a 'mod' first to retrieve relocation info.\n"
|
||||
" - `h : shows this helptext (without exiting)\n"
|
||||
" - `q : quits log2lines\n"
|
||||
" - `R regscan : the output is printed immediately (do a 'bt' first)\n"
|
||||
" - `R regclear : clears previous regscan matches\n"
|
||||
" - `s : the output is printed immediately\n"
|
||||
" - `s clear : clears all statistics.\n"
|
||||
" - `S : only <context> and <add> can be set.\n"
|
||||
|
|
|
@ -34,7 +34,6 @@ LINEINFO lastLine;
|
|||
FILE *logFile = NULL;
|
||||
LIST cache;
|
||||
SUMM summ;
|
||||
REVINFO revinfo;
|
||||
|
||||
|
||||
static void
|
||||
|
@ -99,7 +98,6 @@ reportSource(FILE *outFile)
|
|||
static void
|
||||
report(FILE *outFile)
|
||||
{
|
||||
reportRevision(outFile);
|
||||
reportSource(outFile);
|
||||
clearLastLine();
|
||||
}
|
||||
|
@ -535,17 +533,6 @@ translate_files(FILE *inFile, FILE *outFile)
|
|||
}
|
||||
}
|
||||
|
||||
if (opt_Revision && (strstr(opt_Revision, "regscan") == opt_Revision))
|
||||
{
|
||||
char *s = strchr(opt_Revision, ',');
|
||||
if (s)
|
||||
{
|
||||
*s++ = '\0';
|
||||
revinfo.range = atoi(s);
|
||||
}
|
||||
regscan(outFile);
|
||||
}
|
||||
|
||||
if (opt_stats)
|
||||
{
|
||||
stat_print(outFile, &summ);
|
||||
|
@ -571,7 +558,6 @@ main(int argc, const char **argv)
|
|||
memset(&cache, 0, sizeof(LIST));
|
||||
memset(&sources, 0, sizeof(LIST));
|
||||
stat_clear(&summ);
|
||||
memset(&revinfo, 0, sizeof(REVINFO));
|
||||
clearLastLine();
|
||||
|
||||
optInit = optionInit(argc, argv);
|
||||
|
@ -585,12 +571,6 @@ main(int argc, const char **argv)
|
|||
|
||||
argc -= optCount;
|
||||
|
||||
if (opt_Revision && (strcmp(opt_Revision, "update") == 0))
|
||||
{
|
||||
res = updateSvnlog();
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (check_directory(opt_force))
|
||||
{
|
||||
res = 3;
|
||||
|
@ -677,13 +657,6 @@ main(int argc, const char **argv)
|
|||
PCLOSE(dbgIn);
|
||||
|
||||
cleanup:
|
||||
// See optionParse().
|
||||
if (opt_Revision)
|
||||
{
|
||||
free(opt_Revision);
|
||||
opt_Revision = NULL;
|
||||
}
|
||||
|
||||
// See optionInit().
|
||||
if (opt_Pipe)
|
||||
{
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
#include <rsym.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "revision.h"
|
||||
#include "stat.h"
|
||||
#include "list.h"
|
||||
|
||||
|
@ -24,7 +23,6 @@ struct lineinfo_struct
|
|||
typedef struct lineinfo_struct LINEINFO;
|
||||
|
||||
extern SUMM summ;
|
||||
extern REVINFO revinfo;
|
||||
extern LIST cache;
|
||||
extern FILE *logFile;
|
||||
extern LINEINFO lastLine;
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
#include "log2lines.h"
|
||||
#include "options.h"
|
||||
|
||||
char *optchars = "bcd:fFhl:L:mMP:rR:sS:tTuUvz:";
|
||||
char *optchars = "bcd:fFhl:L:mMP:rsS:tTuUvz:";
|
||||
int opt_buffered = 0; // -b
|
||||
int opt_help = 0; // -h
|
||||
int opt_force = 0; // -f
|
||||
|
@ -37,8 +37,6 @@ int opt_twice = 0; // -t
|
|||
int opt_Twice = 0; // -T
|
||||
int opt_undo = 0; // -u
|
||||
int opt_redo = 0; // -U
|
||||
char *opt_Revision = NULL; // -R
|
||||
int opt_Revision_check = 0; // -R check
|
||||
char opt_dir[PATH_MAX]; // -d <opt_dir>
|
||||
char opt_logFile[PATH_MAX]; // -l|L <opt_logFile>
|
||||
char *opt_mod = NULL; // -mod for opt_logFile
|
||||
|
@ -61,10 +59,6 @@ int optionInit(int argc, const char **argv)
|
|||
strcpy(opt_SourcesPath, "");
|
||||
if ((s = getenv(SOURCES_ENV)))
|
||||
strcpy(opt_SourcesPath, s);
|
||||
revinfo.rev = getRevision(NULL, 1);
|
||||
revinfo.range = DEF_RANGE;
|
||||
revinfo.buildrev = getTBRevision(opt_dir);
|
||||
l2l_dbg(1, "Trunk build revision: %d\n", revinfo.buildrev);
|
||||
|
||||
strcpy(opt_scanned, "");
|
||||
|
||||
|
@ -164,14 +158,6 @@ int optionParse(int argc, const char **argv)
|
|||
optCount++;
|
||||
//just count, see optionInit()
|
||||
break;
|
||||
case 'R':
|
||||
optCount++;
|
||||
if (!opt_Revision)
|
||||
opt_Revision = malloc(LINESIZE);
|
||||
sscanf(optarg, "%s", opt_Revision);
|
||||
if (strcmp(opt_Revision, "check") == 0)
|
||||
opt_Revision_check ++;
|
||||
break;
|
||||
case 's':
|
||||
opt_stats++;
|
||||
break;
|
||||
|
@ -186,7 +172,6 @@ int optionParse(int argc, const char **argv)
|
|||
/* need to retranslate for source info: */
|
||||
opt_undo++;
|
||||
opt_redo++;
|
||||
opt_Revision_check ++;
|
||||
}
|
||||
break;
|
||||
case 't':
|
||||
|
|
|
@ -27,8 +27,6 @@ extern int opt_twice; // -t
|
|||
extern int opt_Twice ; // -T
|
||||
extern int opt_undo ; // -u
|
||||
extern int opt_redo ; // -U
|
||||
extern char *opt_Revision; // -R
|
||||
extern int opt_Revision_check; // -R check
|
||||
extern char opt_dir[]; // -d <opt_dir>
|
||||
extern char opt_logFile[]; // -l <opt_logFile>
|
||||
extern char *opt_mod; // mod for opt_logFile
|
||||
|
|
|
@ -1,299 +0,0 @@
|
|||
/*
|
||||
* ReactOS log2lines
|
||||
* Written by Jan Roeloffzen
|
||||
*
|
||||
* - SVN interface and revision analysis
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "version.h"
|
||||
#include "compat.h"
|
||||
#include "util.h"
|
||||
#include "options.h"
|
||||
#include "log2lines.h"
|
||||
|
||||
static void
|
||||
log_rev_check(FILE *outFile, char *fileName, int showfile)
|
||||
{
|
||||
int rev = 0;
|
||||
char s[LINESIZE];
|
||||
|
||||
strcpy(s, opt_SourcesPath);
|
||||
strcat(s, fileName);
|
||||
rev = getRevision(s, 1);
|
||||
if (!showfile)
|
||||
s[0] = '\0';
|
||||
if (revinfo.opt_verbose)
|
||||
log(outFile, "| R--- %s Last Changed Rev: %d\n", s, rev);
|
||||
|
||||
if (rev && opt_Revision_check)
|
||||
{
|
||||
if (revinfo.rev < revinfo.buildrev)
|
||||
{
|
||||
summ.revconflicts++;
|
||||
log(outFile, "| R--- Conflict %s: source tree(%d) < build(%d)\n", s, rev, revinfo.buildrev);
|
||||
}
|
||||
else if (rev > revinfo.buildrev)
|
||||
{
|
||||
summ.revconflicts++;
|
||||
log(outFile, "| R--- Conflict %s: file(%d) > build(%d)\n", s, rev, revinfo.buildrev);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
logRevCheck(FILE *outFile)
|
||||
{
|
||||
int twice = 0;
|
||||
|
||||
twice = (lastLine.nr2 && strcmp(lastLine.file1, lastLine.file2) != 0);
|
||||
log_rev_check(outFile, lastLine.file1, twice);
|
||||
if (twice)
|
||||
{
|
||||
log_rev_check(outFile, lastLine.file2, twice);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
getRevision(char *fileName, int lastChanged)
|
||||
{
|
||||
char s[LINESIZE];
|
||||
FILE *psvn;
|
||||
int rev = 0;
|
||||
|
||||
if (!fileName)
|
||||
fileName = opt_SourcesPath;
|
||||
sprintf(s, "svn info %s", fileName);
|
||||
if ((psvn = POPEN(s, "r")))
|
||||
{
|
||||
while (fgets(s, LINESIZE, psvn))
|
||||
{
|
||||
if (lastChanged)
|
||||
{
|
||||
if (sscanf(s, "Last Changed Rev: %d", &rev))
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sscanf(s, "Revision: %d", &rev))
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
l2l_dbg(1, "Can't popen: \"%s\"\n", s);
|
||||
|
||||
if (psvn)
|
||||
PCLOSE(psvn);
|
||||
|
||||
return rev;
|
||||
}
|
||||
|
||||
int
|
||||
getTBRevision(char *fileName)
|
||||
{
|
||||
char *s;
|
||||
int rev = 0;
|
||||
|
||||
s = strrchr(fileName, PATH_CHAR);
|
||||
if (s)
|
||||
s += 1;
|
||||
else
|
||||
s = fileName;
|
||||
|
||||
sscanf(s, TRKBUILDPREFIX "%d", &rev);
|
||||
if (!rev)
|
||||
{
|
||||
s = strrchr(fileName, PATH_CHAR);
|
||||
if (s)
|
||||
*s = '\0'; // clear, so we have the parent dir
|
||||
else
|
||||
{
|
||||
// where else to look?
|
||||
fileName = opt_SourcesPath;
|
||||
}
|
||||
rev = getRevision(fileName, 1);
|
||||
if (s)
|
||||
*s = PATH_CHAR; // restore
|
||||
}
|
||||
|
||||
l2l_dbg(1, "TBRevision: %d\n", rev);
|
||||
return rev;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
reportRevision(FILE *outFile)
|
||||
{
|
||||
if (opt_Revision_check)
|
||||
{
|
||||
if (lastLine.valid)
|
||||
logRevCheck(outFile);
|
||||
}
|
||||
}
|
||||
|
||||
unsigned long
|
||||
findRev(FILE *finx, int *rev)
|
||||
{
|
||||
unsigned long pos = 0L;
|
||||
|
||||
while (!fseek(finx, (*rev) * sizeof(unsigned long), SEEK_SET))
|
||||
{
|
||||
fread(&pos, sizeof(long), 1, finx);
|
||||
(*rev)--;
|
||||
if (pos)
|
||||
break;
|
||||
}
|
||||
return pos;
|
||||
}
|
||||
|
||||
int
|
||||
regscan(FILE *outFile)
|
||||
{
|
||||
int res = 0;
|
||||
char logname[PATH_MAX];
|
||||
char inxname[PATH_MAX];
|
||||
char line[LINESIZE + 1];
|
||||
char line2[LINESIZE + 1];
|
||||
FILE *flog = NULL;
|
||||
FILE *finx = NULL;
|
||||
unsigned long pos = 0L;
|
||||
int r;
|
||||
|
||||
sprintf(logname, "%s" PATH_STR "%s", opt_SourcesPath, SVNDB);
|
||||
sprintf(inxname, "%s" PATH_STR "%s", opt_SourcesPath, SVNDB_INX);
|
||||
flog = fopen(logname, "rb");
|
||||
finx = fopen(inxname, "rb");
|
||||
|
||||
if (flog && finx)
|
||||
{
|
||||
r = revinfo.buildrev;
|
||||
if (!fread(&pos, sizeof(long), 1, finx))
|
||||
{
|
||||
res = 2;
|
||||
l2l_dbg(0, "Cannot read magic number\n");
|
||||
}
|
||||
|
||||
if (!res)
|
||||
{
|
||||
if (pos != MAGIC_INX)
|
||||
{
|
||||
res = 3;
|
||||
l2l_dbg(0, "Incorrect magic number (%lx)\n", pos);
|
||||
}
|
||||
}
|
||||
|
||||
if (!res)
|
||||
{
|
||||
char flag[2];
|
||||
char path[PATH_MAX];
|
||||
char path2[PATH_MAX];
|
||||
int wflag = 0;
|
||||
clilog(outFile, "Regression candidates:\n");
|
||||
while (( pos = findRev(finx, &r) ))
|
||||
{
|
||||
if (r < (revinfo.buildrev - revinfo.range))
|
||||
{
|
||||
l2l_dbg(1, "r%d is outside range of %d revisions\n", r, revinfo.range);
|
||||
break;
|
||||
}
|
||||
fseek(flog, pos, SEEK_SET);
|
||||
wflag = 1;
|
||||
fgets(line, LINESIZE, flog);
|
||||
fgets(line2, LINESIZE, flog);
|
||||
while (fgets(line2, LINESIZE, flog))
|
||||
{
|
||||
path2[0] = '\0';
|
||||
if (sscanf(line2, "%1s %s %s", flag, path, path2) >= 2)
|
||||
{
|
||||
if (entry_lookup(&sources, path) || entry_lookup(&sources, path2))
|
||||
{
|
||||
if (wflag == 1)
|
||||
{
|
||||
clilog(outFile, "%sChanged paths:\n", line);
|
||||
summ.regfound++;
|
||||
wflag = 2;
|
||||
}
|
||||
clilog(outFile, "%s", line2);
|
||||
}
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
if (wflag == 2)
|
||||
{
|
||||
int i = 0;
|
||||
clilog(outFile, "\n");
|
||||
while (fgets(line2, LINESIZE, flog))
|
||||
{
|
||||
i++;
|
||||
clilog(outFile, "%s", line2);
|
||||
if (strncmp(LOGBOTTOM, line2, sizeof(LOGBOTTOM) - 1) == 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
res = 1;
|
||||
l2l_dbg(0, "Cannot open %s or %s\n", logname, inxname);
|
||||
}
|
||||
|
||||
if (flog)
|
||||
fclose(flog);
|
||||
if (finx)
|
||||
fclose(finx);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
updateSvnlog(void)
|
||||
{
|
||||
int res = 0;
|
||||
char logname[PATH_MAX];
|
||||
char inxname[PATH_MAX];
|
||||
char line[LINESIZE + 1];
|
||||
FILE *flog = NULL;
|
||||
FILE *finx = NULL;
|
||||
unsigned long pos;
|
||||
int r, y, m, d;
|
||||
char name[NAMESIZE];
|
||||
|
||||
sprintf(logname, "%s" PATH_STR "%s", opt_SourcesPath, SVNDB);
|
||||
sprintf(inxname, "%s" PATH_STR "%s", opt_SourcesPath, SVNDB_INX);
|
||||
flog = fopen(logname, "rb");
|
||||
finx = fopen(inxname, "wb");
|
||||
|
||||
if (flog && finx)
|
||||
{
|
||||
pos = MAGIC_INX;
|
||||
fwrite(&pos, sizeof(long), 1, finx);
|
||||
pos = ftell(flog);
|
||||
while (fgets(line, LINESIZE, flog))
|
||||
{
|
||||
if (sscanf(line, "r%d | %s | %d-%d-%d", &r, name, &y, &m, &d) == 5)
|
||||
{
|
||||
l2l_dbg(1, "%ld r%d | %s | %d-%d-%d\n", pos, r, name, y, m, d);
|
||||
fseek(finx, r * sizeof(unsigned long), SEEK_SET);
|
||||
fwrite(&pos, sizeof(unsigned long), 1, finx);
|
||||
}
|
||||
pos = ftell(flog);
|
||||
}
|
||||
}
|
||||
|
||||
if (flog)
|
||||
fclose(flog);
|
||||
if (finx)
|
||||
fclose(finx);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/* EOF */
|
|
@ -1,27 +0,0 @@
|
|||
/*
|
||||
* ReactOS log2lines
|
||||
* Written by Jan Roeloffzen
|
||||
*
|
||||
* - SVN interface and revision analysis
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
typedef struct revinfo_struct
|
||||
{
|
||||
int rev;
|
||||
int buildrev;
|
||||
int range;
|
||||
int opt_verbose;
|
||||
} REVINFO, *PREVINFO;
|
||||
|
||||
int getRevision(char *fileName, int lastChanged);
|
||||
int getTBRevision(char *fileName);
|
||||
void reportRevision(FILE *outFile);
|
||||
unsigned long findRev(FILE *finx, int *rev);
|
||||
int regscan(FILE *outFile);
|
||||
int updateSvnlog(void);
|
||||
|
||||
/* EOF */
|
Loading…
Reference in a new issue