@@ -32,6 +32,7 @@ fn try_main() -> Result<()> {
3232 "vendor" => vendor,
3333 "package" => package,
3434 "package-srpm" => package_srpm,
35+ "spec" => spec,
3536 _ => print_help,
3637 } ;
3738 f ( & sh) ?;
@@ -155,10 +156,9 @@ fn impl_package(sh: &Shell) -> Result<Package> {
155156 )
156157 . run ( ) ?;
157158 }
158- // Compress with gzip and write to crate
159- let srcpath: Utf8PathBuf = Utf8Path :: new ( "target" ) . join ( format ! ( "{namev}.crate" ) ) ;
160- cmd ! ( sh, "gzip --force --best {p}" ) . run ( ) ?;
161- std:: fs:: rename ( format ! ( "{p}.gz" ) , & srcpath) ?;
159+ // Compress with zstd
160+ let srcpath: Utf8PathBuf = format ! ( "{p}.zstd" ) . into ( ) ;
161+ cmd ! ( sh, "zstd --rm -f {p} -o {srcpath}" ) . run ( ) ?;
162162
163163 Ok ( Package {
164164 version : v,
@@ -243,6 +243,42 @@ fn package_srpm(sh: &Shell) -> Result<()> {
243243 Ok ( ( ) )
244244}
245245
246+ fn update_spec ( sh : & Shell ) -> Result < Utf8PathBuf > {
247+ let _targetdir = get_target_dir ( ) ?;
248+ let p = Utf8Path :: new ( "target" ) ;
249+ let pkg = impl_package ( sh) ?;
250+ let srcpath = pkg. srcpath . file_name ( ) . unwrap ( ) ;
251+ let v = pkg. version ;
252+ let src_vendorpath = pkg. vendorpath . file_name ( ) . unwrap ( ) ;
253+ {
254+ let specin = File :: open ( format ! ( "contrib/packaging/{NAME}.spec" ) )
255+ . map ( BufReader :: new)
256+ . context ( "Opening spec" ) ?;
257+ let mut o = File :: create ( p. join ( format ! ( "{NAME}.spec" ) ) ) . map ( BufWriter :: new) ?;
258+ for line in specin. lines ( ) {
259+ let line = line?;
260+ if line. starts_with ( "Version:" ) {
261+ writeln ! ( o, "# Replaced by cargo xtask spec" ) ?;
262+ writeln ! ( o, "Version: {v}" ) ?;
263+ } else if line. starts_with ( "Source0" ) {
264+ writeln ! ( o, "Source0: {srcpath}" ) ?;
265+ } else if line. starts_with ( "Source1" ) {
266+ writeln ! ( o, "Source1: {src_vendorpath}" ) ?;
267+ } else {
268+ writeln ! ( o, "{line}" ) ?;
269+ }
270+ }
271+ }
272+ let spec_path = p. join ( format ! ( "{NAME}.spec" ) ) ;
273+ Ok ( spec_path)
274+ }
275+
276+ fn spec ( sh : & Shell ) -> Result < ( ) > {
277+ let s = update_spec ( sh) ?;
278+ println ! ( "Generated: {s}" ) ;
279+ Ok ( ( ) )
280+ }
281+
246282fn print_help ( _sh : & Shell ) -> Result < ( ) > {
247283 eprintln ! (
248284 "Tasks:
0 commit comments