@ -76,23 +76,16 @@ namespace repomgr
UpdatePackage ( package ) ;
if ( File . ReadAllText ( Path . Combine ( _ pkgpath , package . Name , "PKGBUILD" ) ) . Contains ( "pkgver()" ) )
Shell . Exec ( "makepkg -os --noconfirm" , Path . Combine ( _ pkgpath , package . Name ) ) ;
package . CurrentVersion =
File . ReadAllText ( Path . Combine ( _ pkgpath , package . Name , "PKGBUILD" ) )
. Split ( "\n" )
. First ( p = > p . StartsWith ( "pkgver=" ) )
. Split ( "pkgver=" ) [ 1 ] ;
package . CurrentVersion + = "-" +
File . ReadAllText ( Path . Combine ( _ pkgpath , package . Name , "PKGBUILD" ) )
. Split ( "\n" )
. First ( p = > p . StartsWith ( "pkgrel=" ) )
. Split ( "pkgrel=" ) [ 1 ] ;
package . CurrentVersion = Shell . ExecR ( "source PKGBUILD; echo \"$pkgver-$pkgrel\"" , Path . Combine ( _ pkgpath , package . Name ) ) ;
WriteIndex ( ) ;
if ( package . CurrentVersion ! = package . RepoVersion | | force )
Shell . Exec ( "makepkg -csf --sign --noconfirm 2>&1| tee buildlog.txt" , Path . Combine ( _ pkgpath , package . Name ) ) ;
if ( force )
Shell . Exec ( "makepkg -Ccsf --sign --noconfirm 2>&1| tee buildlog.txt" , Path . Combine ( _ pkgpath , package . Name ) ) ;
else if ( package . CurrentVersion ! = package . RepoVersion )
Shell . Exec ( "makepkg -Ccs --sign --noconfirm 2>&1| tee buildlog.txt" , Path . Combine ( _ pkgpath , package . Name ) ) ;
else return ;
var resultingPackages = Directory
. GetFiles ( Path . Combine ( _ pkgpath , package . Name ) , $"{package.Name}*{package.CurrentVersion}* .tar*") ;
. GetFiles ( Path . Combine ( _ pkgpath , package . Name ) , "*.pkg.tar*" ) ;
if ( resultingPackages . Length < 1 )
{
package . LastBuildSucceeded = false ;
@ -100,16 +93,26 @@ namespace repomgr
}
package . LastBuildSucceeded = true ;
if ( package . PkgFiles . Any ( ) )
{
foreach ( var pkgFile in package . PkgFiles )
if ( File . Exists ( Path . Combine ( _ repo . Path , pkgFile ) ) )
File . Delete ( Path . Combine ( _ repo . Path , pkgFile ) ) ;
package . PkgFiles . Clear ( ) ;
}
foreach ( var resultingPackage in resultingPackages . Where ( p = > p . EndsWith ( ".sig" ) ) )
{
File . Copy ( resultingPackage , Path . Combine ( _ repo . Path , Path . GetFileName ( resultingPackage ) ) , true ) ;
File . Delete ( resultingPackage ) ;
package . PkgFiles . Add ( Path . GetFileName ( resultingPackage ) ) ;
}
foreach ( var resultingPackage in resultingPackages . Where ( p = > ! p . EndsWith ( ".sig" ) ) )
{
File . Copy ( resultingPackage , Path . Combine ( _ repo . Path , Path . GetFileName ( resultingPackage ) ) , true ) ;
File . Delete ( resultingPackage ) ;
package . PkgFiles . Add ( Path . GetFileName ( resultingPackage ) ) ;
Shell . Exec ( $"repo-add --remove --sign {_repo.Name}.db.tar.gz {Path.GetFileName(resultingPackage)} 2>&1| tee -a {Path.Combine(_buildpath, " repolog . txt ")}" , _ repo . Path ) ;
}
package . RepoVersion = package . CurrentVersion ;
@ -121,15 +124,20 @@ namespace repomgr
if ( Directory . Exists ( packageDir ) )
Directory . Delete ( packageDir , true ) ;
Shell . Exec ( $"repo-remove --sign {_repo.Name}.db.tar.gz {package.Name} 2>&1| tee -a {Path.Combine(_buildpath, " repolog . txt ")}" , _ repo . Path ) ;
foreach ( var file in Directory . GetFiles ( _ repo . Path , $"{package.Name}*.tar*" ) )
File . Delete ( file ) ;
if ( package . PkgFiles . Any ( ) )
{
foreach ( var pkgFile in package . PkgFiles )
if ( File . Exists ( Path . Combine ( _ repo . Path , pkgFile ) ) )
File . Delete ( Path . Combine ( _ repo . Path , pkgFile ) ) ;
package . PkgFiles . Clear ( ) ;
}
_ repo . Packages . Remove ( package ) ;
WriteIndex ( ) ;
}
public void List ( )
{
Console . WriteLine ( Shell . Yellow ( $"{Shell.Bold(_repo.Name)} ({_repo.Packages.Count} packages):" ) ) ;
foreach ( var package in _ repo . Packages )
foreach ( var package in _ repo . Packages . OrderBy ( p = > p . Name ) )
{
var line = $"{Shell.Bold(package.Name)}" ;
if ( package . RepoVersion ! = package . CurrentVersion )
@ -265,6 +273,7 @@ namespace repomgr
public string CurrentVersion = "never-updated" ;
public string RepoVersion = "nA" ;
public bool LastBuildSucceeded = true ;
public readonly List < string > PkgFiles = new List < string > ( ) ;
}
internal static class Shell
@ -289,6 +298,29 @@ namespace repomgr
process . Start ( ) ;
process . WaitForExit ( ) ;
}
public static string ExecR ( string cmd , string workingDirectory )
{
var escapedArgs = cmd . Replace ( "\"" , "\\\"" ) ;
var process = new Process ( )
{
StartInfo = new ProcessStartInfo
{
FileName = "/bin/bash" ,
Arguments = $"-c \" { escapedArgs } \ "" ,
WorkingDirectory = workingDirectory ,
RedirectStandardOutput = true ,
RedirectStandardError = true ,
UseShellExecute = false ,
CreateNoWindow = true ,
}
} ;
process . Start ( ) ;
var stdout = process . StandardOutput . ReadToEnd ( ) ;
process . WaitForExit ( ) ;
return stdout . Trim ( ) ;
}
public static string Bold ( string s )
{