mirror of
https://github.com/sasjs/core.git
synced 2026-01-05 00:20:05 +00:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
62d7bce249 | ||
|
|
fe6c9a793b | ||
|
|
8e13943356 | ||
|
|
04df9600e0 | ||
|
|
e2b0aabfa4 | ||
|
|
c52a623630 | ||
|
|
cf348e8016 |
2
.github/workflows/main.yml
vendored
2
.github/workflows/main.yml
vendored
@@ -23,6 +23,6 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
npx @sasjs/cli compile job -s sasjs/utils/create_sas_package.sas -o sasjsbuild
|
npx @sasjs/cli compile job -s sasjs/utils/create_sas_package.sas -o sasjsbuild
|
||||||
# this part depends on https://github.com/sasjs/server/issues/307
|
# this part depends on https://github.com/sasjs/server/issues/307
|
||||||
# sasjs run sasjsbuild/makepak.sas -t sas9
|
# sasjs run sasjsbuild/jobs/utils/create_sas_package.sas -t sas9
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -10,4 +10,6 @@ sasjsresults/
|
|||||||
mc_*
|
mc_*
|
||||||
|
|
||||||
# ignore .env files as they can contain sasjs access tokens
|
# ignore .env files as they can contain sasjs access tokens
|
||||||
*.env*
|
*.env*
|
||||||
|
|
||||||
|
~
|
||||||
|
|||||||
206
all.sas
206
all.sas
@@ -781,6 +781,43 @@ or %index(&pgm,/tests/testteardown)
|
|||||||
/* send them out without spaces or quote markers */
|
/* send them out without spaces or quote markers */
|
||||||
%do;%unquote(%upcase(&fmt))%end;
|
%do;%unquote(%upcase(&fmt))%end;
|
||||||
%mend mf_getfmtname;/**
|
%mend mf_getfmtname;/**
|
||||||
|
@file
|
||||||
|
@brief Retrieves the current branch from a local GIT repo
|
||||||
|
@details In a local git repository, the current branch is always available in
|
||||||
|
the `.git/HEAD` file in a format like this: `ref: refs/heads/master`
|
||||||
|
|
||||||
|
This macro simply reads the file and returns the last word (eg `master`).
|
||||||
|
|
||||||
|
Example usage:
|
||||||
|
|
||||||
|
%let gitdir=%sysfunc(pathname(work))/core;
|
||||||
|
%let repo=https://github.com/sasjs/core;
|
||||||
|
%put source clone rc=%sysfunc(GITFN_CLONE(&repo,&gitdir));
|
||||||
|
|
||||||
|
%put The current branch is %mf_getgitbranch(&gitdir);
|
||||||
|
|
||||||
|
@param [in] gitdir The directory containing the GIT repository
|
||||||
|
|
||||||
|
<h4> SAS Macros </h4>
|
||||||
|
@li mf_readfile.sas
|
||||||
|
|
||||||
|
<h4> Related Macros </h4>
|
||||||
|
@li mp_gitadd.sas
|
||||||
|
@li mp_gitlog.sas
|
||||||
|
@li mp_gitreleaseinfo.sas
|
||||||
|
@li mp_gitstatus.sas
|
||||||
|
|
||||||
|
@version 9.2
|
||||||
|
@author Allan Bowe
|
||||||
|
**/
|
||||||
|
|
||||||
|
%macro mf_getgitbranch(gitdir
|
||||||
|
)/*/STORE SOURCE*/;
|
||||||
|
|
||||||
|
%scan(%mf_readfile(&gitdir/.git/HEAD),-1)
|
||||||
|
|
||||||
|
%mend mf_getgitbranch;
|
||||||
|
/**
|
||||||
@file
|
@file
|
||||||
@brief retrieves a key value pair from a control dataset
|
@brief retrieves a key value pair from a control dataset
|
||||||
@details By default, control dataset is work.mp_setkeyvalue. Usage:
|
@details By default, control dataset is work.mp_setkeyvalue. Usage:
|
||||||
@@ -1902,6 +1939,69 @@ Usage:
|
|||||||
)/*/STORE SOURCE*/;
|
)/*/STORE SOURCE*/;
|
||||||
%mf_getattrn(&libds,NLOBS)
|
%mf_getattrn(&libds,NLOBS)
|
||||||
%mend mf_nobs;/**
|
%mend mf_nobs;/**
|
||||||
|
@file
|
||||||
|
@brief Reads the first line of a file using pure macro
|
||||||
|
@details Reads the first line of a file and returns it. Future versions may
|
||||||
|
read each line into a macro variable array.
|
||||||
|
|
||||||
|
Generally, reading data into macro variables is not great as certain
|
||||||
|
nonprintable characters (such as CR, LF) may be dropped in the conversion.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
%mf_writefile(&sasjswork/myfile.txt,l1=some content,l2=more content)
|
||||||
|
|
||||||
|
%put %mf_readfile(&sasjswork/myfile.txt);
|
||||||
|
|
||||||
|
|
||||||
|
@param [in] fpath Full path to file to be read
|
||||||
|
|
||||||
|
<h4> Related Macros </h4>
|
||||||
|
@li mf_deletefile.sas
|
||||||
|
@li mf_writefile.sas
|
||||||
|
@li mf_readfile.test.sas
|
||||||
|
|
||||||
|
@version 9.2
|
||||||
|
@author Allan Bowe
|
||||||
|
**/
|
||||||
|
/** @cond */
|
||||||
|
|
||||||
|
%macro mf_readfile(fpath
|
||||||
|
)/*/STORE SOURCE*/;
|
||||||
|
%local fref rc fid fcontent;
|
||||||
|
|
||||||
|
/* check file exists */
|
||||||
|
%if %sysfunc(filename(fref,&fpath)) ne 0 %then %do;
|
||||||
|
%put &=fref &=fpath;
|
||||||
|
%put %str(ERR)OR: %sysfunc(sysmsg());
|
||||||
|
%return;
|
||||||
|
%end;
|
||||||
|
|
||||||
|
%let fid=%sysfunc(fopen(&fref,I));
|
||||||
|
|
||||||
|
%if &fid=0 %then %do;
|
||||||
|
%put %str(ERR)OR: %sysfunc(sysmsg());
|
||||||
|
%return;
|
||||||
|
%end;
|
||||||
|
|
||||||
|
%if %sysfunc(fread(&fid)) = 0 %then %do;
|
||||||
|
%let rc=%sysfunc(fget(&fid,fcontent,65534));
|
||||||
|
&fcontent
|
||||||
|
%end;
|
||||||
|
|
||||||
|
/*
|
||||||
|
%do %while(%sysfunc(fread(&fid)) = 0);
|
||||||
|
%let rc=%sysfunc(fget(&fid,fcontent,65534));
|
||||||
|
&fcontent
|
||||||
|
%end;
|
||||||
|
*/
|
||||||
|
|
||||||
|
%let rc=%sysfunc(fclose(&fid));
|
||||||
|
%let rc=%sysfunc(filename(&fref));
|
||||||
|
|
||||||
|
%mend mf_readfile;
|
||||||
|
/** @endcond */
|
||||||
|
/**
|
||||||
@file mf_trimstr.sas
|
@file mf_trimstr.sas
|
||||||
@brief Removes character(s) from the end, if they exist
|
@brief Removes character(s) from the end, if they exist
|
||||||
@details If the designated characters exist at the end of the string, they
|
@details If the designated characters exist at the end of the string, they
|
||||||
@@ -8212,6 +8312,110 @@ data _null_;
|
|||||||
run;
|
run;
|
||||||
|
|
||||||
%mend mp_gitadd;
|
%mend mp_gitadd;
|
||||||
|
/**
|
||||||
|
@file
|
||||||
|
@brief Creates a dataset with the commit history of a local repository
|
||||||
|
@details Returns the commit history from a local repository. The name of the
|
||||||
|
branch is also returned.
|
||||||
|
|
||||||
|
More details here:
|
||||||
|
https://documentation.sas.com/doc/ko/pgmsascdc/v_033/lefunctionsref/n1qo5miyvry1nen111js203hlwrh.htm
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
%let gitdir=%sysfunc(pathname(work))/core;
|
||||||
|
%let repo=https://github.com/sasjs/core;
|
||||||
|
%put source clone rc=%sysfunc(GITFN_CLONE(&repo,&dir));
|
||||||
|
|
||||||
|
%mp_gitlog(&gitdir,outds=work.mp_gitlog)
|
||||||
|
|
||||||
|
@param [in] gitdir The directory containing the GIT repository
|
||||||
|
@param [in] filter= (BRANCHONLY) To return only the commits for the current
|
||||||
|
branch, use BRANCHONLY (the default). Anything else will return the entire
|
||||||
|
commit history.
|
||||||
|
@param [out] outds= (work.mp_gitlog) The output dataset to create.
|
||||||
|
All vars are $128 except `message` which is $4000.
|
||||||
|
@li author returns the author who submitted the commit.
|
||||||
|
@li children_ids returns a list of the children commit IDs
|
||||||
|
@li committer returns the name of the committer.
|
||||||
|
@li committer_email returns the email of the committer.
|
||||||
|
@li email returns the email of the commit author.
|
||||||
|
@li id returns the commit ID of the commit object.
|
||||||
|
@li in_current_branch returns "TRUE" or "FALSE" to indicate if the commit is
|
||||||
|
in the current branch.
|
||||||
|
@li message returns the commit message.
|
||||||
|
@li parent_ids returns a list of the parent commit IDs.
|
||||||
|
@li stash returns "TRUE" or "FALSE" to indicate if the commit is a stash
|
||||||
|
commit.
|
||||||
|
@li time returns the time of the commit as numeric string
|
||||||
|
@li commit_time_num time of the commit as numeric SAS datetime
|
||||||
|
@li commit_time_str the commit_time_num variable cast as string
|
||||||
|
|
||||||
|
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages
|
||||||
|
@param [in] nobs= (0) Set to an integer greater than 0 to restrict the number
|
||||||
|
of rows returned
|
||||||
|
|
||||||
|
<h4> SAS Macros </h4>
|
||||||
|
@li mf_getgitbranch.sas
|
||||||
|
|
||||||
|
<h4> Related Files </h4>
|
||||||
|
@li mp_gitadd.sas
|
||||||
|
@li mp_gitreleaseinfo.sas
|
||||||
|
@li mp_gitstatus.sas
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
%macro mp_gitlog(gitdir,outds=work.mp_gitlog,mdebug=0,filter=BRANCHONLY,nobs=0);
|
||||||
|
|
||||||
|
%local varlist i var;
|
||||||
|
%let varlist=author children_ids committer committer_email email id
|
||||||
|
in_current_branch parent_ids stash time ;
|
||||||
|
|
||||||
|
data &outds;
|
||||||
|
LENGTH gitdir branch $ 1024 message $4000 &varlist $128 commit_time_num 8.
|
||||||
|
commit_time_str $32;
|
||||||
|
call missing (of _all_);
|
||||||
|
branch="%mf_getgitbranch(&gitdir)";
|
||||||
|
gitdir=symget('gitdir');
|
||||||
|
rc=git_status_free(trim(gitdir));
|
||||||
|
if rc=-1 then do;
|
||||||
|
put "The libgit2 library is unavailable and no Git operations can be used.";
|
||||||
|
put "See: https://stackoverflow.com/questions/74082874";
|
||||||
|
stop;
|
||||||
|
end;
|
||||||
|
else if rc=-2 then do;
|
||||||
|
put "The libgit2 library is available, but the status function failed.";
|
||||||
|
put "See the log for details.";
|
||||||
|
stop;
|
||||||
|
end;
|
||||||
|
entries=git_commit_log(trim(gitdir));
|
||||||
|
do n=1 to entries;
|
||||||
|
|
||||||
|
%do i=1 %to %sysfunc(countw(&varlist message));
|
||||||
|
%let var=%scan(&varlist message,&i,%str( ));
|
||||||
|
rc=git_commit_get(n,trim(gitdir),"&var",&var);
|
||||||
|
%end;
|
||||||
|
/* convert unix time to SAS time - https://4gl.uk/corelink0 */
|
||||||
|
/* Number of seconds between 01JAN1960 and 01JAN1970: 315619200 */
|
||||||
|
format commit_time_num datetime19.;
|
||||||
|
commit_time_num=sum(input(cats(time),best.),315619200);
|
||||||
|
commit_time_str=put(commit_time_num,datetime19.);
|
||||||
|
%if &mdebug=1 %then %do;
|
||||||
|
putlog (_all_)(=);
|
||||||
|
%end;
|
||||||
|
if "&filter"="BRANCHONLY" then do;
|
||||||
|
if cats(in_current_branch)='TRUE' then output;
|
||||||
|
end;
|
||||||
|
else output;
|
||||||
|
%if &nobs>0 %then %do;
|
||||||
|
if n ge &nobs then stop;
|
||||||
|
%end;
|
||||||
|
end;
|
||||||
|
rc=git_commit_free(trim(gitdir));
|
||||||
|
keep gitdir branch &varlist message time commit_time_num commit_time_str;
|
||||||
|
run;
|
||||||
|
|
||||||
|
%mend mp_gitlog;
|
||||||
/**
|
/**
|
||||||
@file
|
@file
|
||||||
@brief Pulls latest release info from a GIT repository
|
@brief Pulls latest release info from a GIT repository
|
||||||
@@ -8348,7 +8552,7 @@ data &outds;
|
|||||||
putlog (_all_)(=);
|
putlog (_all_)(=);
|
||||||
%end;
|
%end;
|
||||||
end;
|
end;
|
||||||
rc=git_status_free(gitdir);
|
rc=git_status_free(trim(gitdir));
|
||||||
drop rc cnt;
|
drop rc cnt;
|
||||||
run;
|
run;
|
||||||
|
|
||||||
|
|||||||
37
base/mf_getgitbranch.sas
Normal file
37
base/mf_getgitbranch.sas
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
/**
|
||||||
|
@file
|
||||||
|
@brief Retrieves the current branch from a local GIT repo
|
||||||
|
@details In a local git repository, the current branch is always available in
|
||||||
|
the `.git/HEAD` file in a format like this: `ref: refs/heads/master`
|
||||||
|
|
||||||
|
This macro simply reads the file and returns the last word (eg `master`).
|
||||||
|
|
||||||
|
Example usage:
|
||||||
|
|
||||||
|
%let gitdir=%sysfunc(pathname(work))/core;
|
||||||
|
%let repo=https://github.com/sasjs/core;
|
||||||
|
%put source clone rc=%sysfunc(GITFN_CLONE(&repo,&gitdir));
|
||||||
|
|
||||||
|
%put The current branch is %mf_getgitbranch(&gitdir);
|
||||||
|
|
||||||
|
@param [in] gitdir The directory containing the GIT repository
|
||||||
|
|
||||||
|
<h4> SAS Macros </h4>
|
||||||
|
@li mf_readfile.sas
|
||||||
|
|
||||||
|
<h4> Related Macros </h4>
|
||||||
|
@li mp_gitadd.sas
|
||||||
|
@li mp_gitlog.sas
|
||||||
|
@li mp_gitreleaseinfo.sas
|
||||||
|
@li mp_gitstatus.sas
|
||||||
|
|
||||||
|
@version 9.2
|
||||||
|
@author Allan Bowe
|
||||||
|
**/
|
||||||
|
|
||||||
|
%macro mf_getgitbranch(gitdir
|
||||||
|
)/*/STORE SOURCE*/;
|
||||||
|
|
||||||
|
%scan(%mf_readfile(&gitdir/.git/HEAD),-1)
|
||||||
|
|
||||||
|
%mend mf_getgitbranch;
|
||||||
63
base/mf_readfile.sas
Normal file
63
base/mf_readfile.sas
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
/**
|
||||||
|
@file
|
||||||
|
@brief Reads the first line of a file using pure macro
|
||||||
|
@details Reads the first line of a file and returns it. Future versions may
|
||||||
|
read each line into a macro variable array.
|
||||||
|
|
||||||
|
Generally, reading data into macro variables is not great as certain
|
||||||
|
nonprintable characters (such as CR, LF) may be dropped in the conversion.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
%mf_writefile(&sasjswork/myfile.txt,l1=some content,l2=more content)
|
||||||
|
|
||||||
|
%put %mf_readfile(&sasjswork/myfile.txt);
|
||||||
|
|
||||||
|
|
||||||
|
@param [in] fpath Full path to file to be read
|
||||||
|
|
||||||
|
<h4> Related Macros </h4>
|
||||||
|
@li mf_deletefile.sas
|
||||||
|
@li mf_writefile.sas
|
||||||
|
@li mf_readfile.test.sas
|
||||||
|
|
||||||
|
@version 9.2
|
||||||
|
@author Allan Bowe
|
||||||
|
**/
|
||||||
|
/** @cond */
|
||||||
|
|
||||||
|
%macro mf_readfile(fpath
|
||||||
|
)/*/STORE SOURCE*/;
|
||||||
|
%local fref rc fid fcontent;
|
||||||
|
|
||||||
|
/* check file exists */
|
||||||
|
%if %sysfunc(filename(fref,&fpath)) ne 0 %then %do;
|
||||||
|
%put &=fref &=fpath;
|
||||||
|
%put %str(ERR)OR: %sysfunc(sysmsg());
|
||||||
|
%return;
|
||||||
|
%end;
|
||||||
|
|
||||||
|
%let fid=%sysfunc(fopen(&fref,I));
|
||||||
|
|
||||||
|
%if &fid=0 %then %do;
|
||||||
|
%put %str(ERR)OR: %sysfunc(sysmsg());
|
||||||
|
%return;
|
||||||
|
%end;
|
||||||
|
|
||||||
|
%if %sysfunc(fread(&fid)) = 0 %then %do;
|
||||||
|
%let rc=%sysfunc(fget(&fid,fcontent,65534));
|
||||||
|
&fcontent
|
||||||
|
%end;
|
||||||
|
|
||||||
|
/*
|
||||||
|
%do %while(%sysfunc(fread(&fid)) = 0);
|
||||||
|
%let rc=%sysfunc(fget(&fid,fcontent,65534));
|
||||||
|
&fcontent
|
||||||
|
%end;
|
||||||
|
*/
|
||||||
|
|
||||||
|
%let rc=%sysfunc(fclose(&fid));
|
||||||
|
%let rc=%sysfunc(filename(&fref));
|
||||||
|
|
||||||
|
%mend mf_readfile;
|
||||||
|
/** @endcond */
|
||||||
104
base/mp_gitlog.sas
Normal file
104
base/mp_gitlog.sas
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
/**
|
||||||
|
@file
|
||||||
|
@brief Creates a dataset with the commit history of a local repository
|
||||||
|
@details Returns the commit history from a local repository. The name of the
|
||||||
|
branch is also returned.
|
||||||
|
|
||||||
|
More details here:
|
||||||
|
https://documentation.sas.com/doc/ko/pgmsascdc/v_033/lefunctionsref/n1qo5miyvry1nen111js203hlwrh.htm
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
%let gitdir=%sysfunc(pathname(work))/core;
|
||||||
|
%let repo=https://github.com/sasjs/core;
|
||||||
|
%put source clone rc=%sysfunc(GITFN_CLONE(&repo,&dir));
|
||||||
|
|
||||||
|
%mp_gitlog(&gitdir,outds=work.mp_gitlog)
|
||||||
|
|
||||||
|
@param [in] gitdir The directory containing the GIT repository
|
||||||
|
@param [in] filter= (BRANCHONLY) To return only the commits for the current
|
||||||
|
branch, use BRANCHONLY (the default). Anything else will return the entire
|
||||||
|
commit history.
|
||||||
|
@param [out] outds= (work.mp_gitlog) The output dataset to create.
|
||||||
|
All vars are $128 except `message` which is $4000.
|
||||||
|
@li author returns the author who submitted the commit.
|
||||||
|
@li children_ids returns a list of the children commit IDs
|
||||||
|
@li committer returns the name of the committer.
|
||||||
|
@li committer_email returns the email of the committer.
|
||||||
|
@li email returns the email of the commit author.
|
||||||
|
@li id returns the commit ID of the commit object.
|
||||||
|
@li in_current_branch returns "TRUE" or "FALSE" to indicate if the commit is
|
||||||
|
in the current branch.
|
||||||
|
@li message returns the commit message.
|
||||||
|
@li parent_ids returns a list of the parent commit IDs.
|
||||||
|
@li stash returns "TRUE" or "FALSE" to indicate if the commit is a stash
|
||||||
|
commit.
|
||||||
|
@li time returns the time of the commit as numeric string
|
||||||
|
@li commit_time_num time of the commit as numeric SAS datetime
|
||||||
|
@li commit_time_str the commit_time_num variable cast as string
|
||||||
|
|
||||||
|
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages
|
||||||
|
@param [in] nobs= (0) Set to an integer greater than 0 to restrict the number
|
||||||
|
of rows returned
|
||||||
|
|
||||||
|
<h4> SAS Macros </h4>
|
||||||
|
@li mf_getgitbranch.sas
|
||||||
|
|
||||||
|
<h4> Related Files </h4>
|
||||||
|
@li mp_gitadd.sas
|
||||||
|
@li mp_gitreleaseinfo.sas
|
||||||
|
@li mp_gitstatus.sas
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
%macro mp_gitlog(gitdir,outds=work.mp_gitlog,mdebug=0,filter=BRANCHONLY,nobs=0);
|
||||||
|
|
||||||
|
%local varlist i var;
|
||||||
|
%let varlist=author children_ids committer committer_email email id
|
||||||
|
in_current_branch parent_ids stash time ;
|
||||||
|
|
||||||
|
data &outds;
|
||||||
|
LENGTH gitdir branch $ 1024 message $4000 &varlist $128 commit_time_num 8.
|
||||||
|
commit_time_str $32;
|
||||||
|
call missing (of _all_);
|
||||||
|
branch="%mf_getgitbranch(&gitdir)";
|
||||||
|
gitdir=symget('gitdir');
|
||||||
|
rc=git_status_free(trim(gitdir));
|
||||||
|
if rc=-1 then do;
|
||||||
|
put "The libgit2 library is unavailable and no Git operations can be used.";
|
||||||
|
put "See: https://stackoverflow.com/questions/74082874";
|
||||||
|
stop;
|
||||||
|
end;
|
||||||
|
else if rc=-2 then do;
|
||||||
|
put "The libgit2 library is available, but the status function failed.";
|
||||||
|
put "See the log for details.";
|
||||||
|
stop;
|
||||||
|
end;
|
||||||
|
entries=git_commit_log(trim(gitdir));
|
||||||
|
do n=1 to entries;
|
||||||
|
|
||||||
|
%do i=1 %to %sysfunc(countw(&varlist message));
|
||||||
|
%let var=%scan(&varlist message,&i,%str( ));
|
||||||
|
rc=git_commit_get(n,trim(gitdir),"&var",&var);
|
||||||
|
%end;
|
||||||
|
/* convert unix time to SAS time - https://4gl.uk/corelink0 */
|
||||||
|
/* Number of seconds between 01JAN1960 and 01JAN1970: 315619200 */
|
||||||
|
format commit_time_num datetime19.;
|
||||||
|
commit_time_num=sum(input(cats(time),best.),315619200);
|
||||||
|
commit_time_str=put(commit_time_num,datetime19.);
|
||||||
|
%if &mdebug=1 %then %do;
|
||||||
|
putlog (_all_)(=);
|
||||||
|
%end;
|
||||||
|
if "&filter"="BRANCHONLY" then do;
|
||||||
|
if cats(in_current_branch)='TRUE' then output;
|
||||||
|
end;
|
||||||
|
else output;
|
||||||
|
%if &nobs>0 %then %do;
|
||||||
|
if n ge &nobs then stop;
|
||||||
|
%end;
|
||||||
|
end;
|
||||||
|
rc=git_commit_free(trim(gitdir));
|
||||||
|
keep gitdir branch &varlist message time commit_time_num commit_time_str;
|
||||||
|
run;
|
||||||
|
|
||||||
|
%mend mp_gitlog;
|
||||||
@@ -60,7 +60,7 @@ data &outds;
|
|||||||
putlog (_all_)(=);
|
putlog (_all_)(=);
|
||||||
%end;
|
%end;
|
||||||
end;
|
end;
|
||||||
rc=git_status_free(gitdir);
|
rc=git_status_free(trim(gitdir));
|
||||||
drop rc cnt;
|
drop rc cnt;
|
||||||
run;
|
run;
|
||||||
|
|
||||||
|
|||||||
@@ -27,14 +27,14 @@ run;
|
|||||||
%let dir = %sysfunc(pathname(work))/core;
|
%let dir = %sysfunc(pathname(work))/core;
|
||||||
%put source clone rc=%sysfunc(GITFN_CLONE(https://github.com/sasjs/core,&dir));
|
%put source clone rc=%sysfunc(GITFN_CLONE(https://github.com/sasjs/core,&dir));
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
clone the target repo.
|
clone the target repo.
|
||||||
If you have issues, see: https://stackoverflow.com/questions/74082874
|
If you have issues, see: https://stackoverflow.com/questions/74082874
|
||||||
*/
|
*/
|
||||||
options dlcreatedir;
|
options dlcreatedir;
|
||||||
libname _ "&dirOut.";
|
|
||||||
%let dirOut = %sysfunc(pathname(work))/package;
|
%let dirOut = %sysfunc(pathname(work))/package;
|
||||||
|
libname _ "&dirOut.";
|
||||||
|
|
||||||
%put tgt clone rc=%sysfunc(GITFN_CLONE(
|
%put tgt clone rc=%sysfunc(GITFN_CLONE(
|
||||||
git@github.com:SASPAC/sasjscore.git,
|
git@github.com:SASPAC/sasjscore.git,
|
||||||
&dirOut,
|
&dirOut,
|
||||||
|
|||||||
20
tests/base/mf_getgitbranch.test.sas
Normal file
20
tests/base/mf_getgitbranch.test.sas
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
/**
|
||||||
|
@file
|
||||||
|
@brief Testing mf_getgitbranch.sas macro
|
||||||
|
|
||||||
|
<h4> SAS Macros </h4>
|
||||||
|
@li mf_getgitbranch.sas
|
||||||
|
@li mp_assert.sas
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
/* grab core repo */
|
||||||
|
%let gitdir=%sysfunc(pathname(work))/core;
|
||||||
|
%let repo=https://github.com/sasjs/core;
|
||||||
|
%put source clone rc=%sysfunc(GITFN_CLONE(&repo,&gitdir));
|
||||||
|
|
||||||
|
%mp_assert(
|
||||||
|
iftrue=(%mf_getgitbranch(&gitdir)=main),
|
||||||
|
desc=Checking correct branch was obtained,
|
||||||
|
outds=work.test_results
|
||||||
|
)
|
||||||
40
tests/base/mf_readfile.test.sas
Normal file
40
tests/base/mf_readfile.test.sas
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
/**
|
||||||
|
@file
|
||||||
|
@brief Testing mf_readfile.sas macro
|
||||||
|
|
||||||
|
<h4> SAS Macros </h4>
|
||||||
|
@li mf_readfile.sas
|
||||||
|
@li mf_writefile.sas
|
||||||
|
@li mp_assert.sas
|
||||||
|
@li mp_assertscope.sas
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
%let f=&sasjswork/myfile.txt;
|
||||||
|
|
||||||
|
%mf_writefile(&f,l1=some content,l2=more content)
|
||||||
|
data _null_;
|
||||||
|
infile "&f";
|
||||||
|
input;
|
||||||
|
putlog _infile_;
|
||||||
|
run;
|
||||||
|
|
||||||
|
%mp_assert(
|
||||||
|
iftrue=(&syscc=0),
|
||||||
|
desc=Check code ran without errors,
|
||||||
|
outds=work.test_results
|
||||||
|
)
|
||||||
|
|
||||||
|
/* test for scope leakage */
|
||||||
|
%global result;
|
||||||
|
%mp_assertscope(SNAPSHOT)
|
||||||
|
%put %mf_readfile(&f);
|
||||||
|
%mp_assertscope(COMPARE)
|
||||||
|
|
||||||
|
/* test result */
|
||||||
|
%mp_assert(
|
||||||
|
iftrue=(%mf_readfile(&f)=some content),
|
||||||
|
desc=Checking first line was ingested successfully,
|
||||||
|
outds=work.test_results
|
||||||
|
)
|
||||||
|
|
||||||
32
tests/base/mp_gitlog.test.sas
Normal file
32
tests/base/mp_gitlog.test.sas
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
/**
|
||||||
|
@file
|
||||||
|
@brief Testing mp_gitlog.sas macro
|
||||||
|
|
||||||
|
<h4> SAS Macros </h4>
|
||||||
|
@li mf_nobs.sas
|
||||||
|
@li mp_gitlog.sas
|
||||||
|
@li mp_assert.sas
|
||||||
|
@li mp_assertscope.sas
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
/* grab core repo */
|
||||||
|
%let gitdir=%sysfunc(pathname(work))/core;
|
||||||
|
%let repo=https://github.com/sasjs/core;
|
||||||
|
%put source clone rc=%sysfunc(GITFN_CLONE(&repo,&gitdir));
|
||||||
|
|
||||||
|
%mp_assertscope(SNAPSHOT)
|
||||||
|
%mp_gitlog(&gitdir,outds=work.test1)
|
||||||
|
%mp_assertscope(COMPARE)
|
||||||
|
|
||||||
|
%mp_assert(
|
||||||
|
iftrue=(&syscc=0),
|
||||||
|
desc=Regular test works,
|
||||||
|
outds=work.test_results
|
||||||
|
)
|
||||||
|
|
||||||
|
%mp_assert(
|
||||||
|
iftrue=(%mf_nobs(work.test1)>1000),
|
||||||
|
desc=output has gt 1000 rows,
|
||||||
|
outds=work.test_results
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user