*! version 5.0
* 2021/9/5
* gitee changes raw code
*! version 4.1, 2021/6/17
*! version 4.0, 2021/5/17
*! version 3.0
* 27 Feb 2020
* addeing curl version
* Stata 16 is blocked by Gitee.com
* curl is used when the stata version is higher than 15.
*!version 2.0
* 25 Feb 2020
* Kerry Du, kerrydu@xmu.edu.cn
cap program drop gitee
program define gitee
version 14
mata: vfile = cat("https://gitee.com/kerrydu/gitee/raw/master/gitee.ado")
mata: st_local("versiongit",subinstr(vfile[1]," ","",.))
local versiongit = subinstr("`versiongit'","*!version","",.)
qui findfile gitee.ado
mata: vfile = cat("`r(fn)'")
mata: st_local("versionuse",subinstr(vfile[1]," ","",.))
local versionuse = subinstr("`versionuse'","*!version","",.)
if(`versionuse'<`versiongit'){
qui net install gitee, from("https://gitee.com/kerrydu/gitee/raw/master") force
}
syntax [anything], [replace force from(string) all]
tokenize `"`0'"', p(",")
local rnew `3'
gettoken subc 0:0, p(" ,")
tokenize `"`0'"', p(",")
if !(`"`subc'"'=="install" |`"`subc'"'=="get" ){
di as red "gitee should be followed by install or get."
error 198
}
if (`"`from'"'==""){
if (`"`1'"'==""|`"`1'"'==","){
di as error "username/repository[/subfolder] should be specified when from() is not specified."
exit 198
}
local reps `1'
local reps=subinstr(`"`reps'"',"\","/",.)
tokenize `"`reps'"', p("/")
local usr `1'`2'`3'
local pth=subinstr(`"`reps'"',`"`usr'"',"",1)
if `"`pth'"'!=""{
local pth /tree/master`pth'/
}
tempname N
mata: files=cat(`"https://gitee.com/`usr'`pth'"')
mata: flag=select(1::length(files),strmatch(files,`""'))
mata: st_numscalar("`N'",length(flag))
if `=`N''==0{
di as red "No Stata files found in the repository."
exit
}
mata: files=files[flag:+1,.]
mata: files=select(files,!strpos(files,`""'))
mata: files=select(files,strpos(files,`".pkg"'))
mata: st_numscalar("`N'",length(files))
if `=`N''==0{
di as red "No Stata *.pkg files found in the repository."
exit
}
mata: files = substr(files,strpos(files,`"href=""'):+6,.)
mata: files = substr(files,1,strpos(files,`"">"'):-1)
mata: files ="https://gitee.com":+ subinstr(files, "/blob/master","/raw/master",1)
mata: pkgs = ""
mata: urls = ""
mata: pathsplit(files,urls,pkgs)
mata: st_local("urls",urls[1])
mata: st_local("pkgs",strconcat(pkgs))
if(`"`pkgs'"'!=""){
di _n
if "`subc'" == "install" di "trying to install package(s): `pkgs'"
else di "trying to copy ancillary files in package(s): `pkgs'"
di _n
foreach pkgi of local pkgs{
net `subc' `pkgi', from(`urls') `rnew'
}
}
}
else{
if(`"`1'"'!=""&`"`1'"'!=","){
local pkgs `1'
}
local rnew=subinstr(`"`rnew'"',`"from(`from')"',"",.)
tempname N
mata: files=cat(`"`from'"')
mata: flag=select(1::length(files),strmatch(files,`""'))
mata: st_numscalar("`N'",length(flag))
if `=`N''==0{
di as red "No Stata files found in the repository."
exit
}
mata: files=files[flag:+1,.]
mata: files=select(files,!strpos(files,`""'))
mata: files=select(files,strpos(files,`".pkg"'))
mata: st_numscalar("`N'",length(files))
if `=`N''==0{
di as red "No Stata *.pkg files found in the repository."
exit
}
//mata: files
mata: files = substr(files,strpos(files,`"href=""'):+6,.)
mata: files = substr(files,1,strpos(files,`"">"'):-1)
mata: files ="https://gitee.com":+ subinstr(files, "/blob/master","/raw/master",1)
mata: pkgsfound = ""
mata: urls = ""
mata: pathsplit(files,urls,pkgsfound)
mata: st_local("urls",urls[1])
mata: st_local("pkgsfound",strconcat(pkgsfound))
foreach pkgi of local pkgs{
mata: flag=strmatch(pkgsfound,"`pkgi'.pkg")
mata: st_numscalar("`N'",sum(flag))
if `=`N''==0{
di as red "`pkgi'.pkg is not found."
di as red "Check the name of the installed package in the repository."
mata: notation(pkgsfound)
exit
}
net `subc' `pkgi', from(`urls') `rnew'
}
if `"`pkgs'"'==""{
if(`"`pkgsfound'"'==""){
di as red "*.pkg files not found."
di as red "There are not installable packages in the repository."
}
else{
di _n
if "`subc'" == "install" di "trying to install package(s): `pkgs'"
else di "trying to copy ancillary files in package(s): `pkgs'"
di _n
foreach pkgi of local pkgsfound{
net `subc' `pkgi', from(`urls') `rnew'
}
}
}
}
end
cap mata mata drop notation()
cap mata mata drop strconcat()
mata:
void function notation(string colvector filenames)
{
//flag=strpos(filenames,".pkg")
flag=regexm(filenames,"^.*(\.pkg)$")
//flag
if(sum(flag)>0){
printf("note: the specified repository includes %s \n",strconcat(select(filenames,flag)))
}
}
string function strconcat(string vector s)
{
ss=""
for(i=1;i<=length(s);i++){
ss=ss+" " + s[i]
}
return(ss)
}
end