Advertisement
theanonym

cata-update.pl

Aug 8th, 2016
432
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 2.62 KB | None | 0 0
  1. #!/usr/bin/perl
  2. use 5.010;
  3. use strict;
  4. no warnings "deprecated";
  5. use utf8;
  6. use if $^O =~ /win/i, encoding => ("utf8", STDOUT => "cp866");
  7.  
  8. use LWP;
  9. use Archive::Extract;
  10. use File::Temp;
  11. use File::Spec::Functions qw/catfile catdir/;
  12. use File::Copy qw/move/;
  13. use File::Copy::Recursive qw/rcopy/;
  14. use File::Path qw/rmtree/;
  15.  
  16. # ----------------------------------------
  17.  
  18. my $game_dir    = "cataclysmdda-tiles";
  19. my $backup_dir  = "cataclysmdda-tiles.old";
  20.  
  21. # ----------------------------------------
  22.  
  23. my $lwp = new LWP::UserAgent;
  24.  
  25. say "Получаем ссылку на последнюю версию...";
  26. my $address = $^O =~ /win/i ? "http://dev.narc.ro/cataclysm/jenkins-latest/Windows/Tiles/"
  27.                             : "http://dev.narc.ro/cataclysm/jenkins-latest/Linux/Tiles/";
  28. my $res = $lwp->get($address);
  29. die $res->status_line unless $res->is_success;
  30. my $latest = $address . ($res->content =~ /href="(cataclysmdda.*?\.(?:gz|zip))/gm)[-1];
  31.  
  32. # ----------------------------------------
  33.  
  34. say "Загрузка `$latest'...";
  35. $res = $lwp->get($latest);
  36. die $res->status_line unless $res->is_success;
  37.  
  38. my $tmpfile = new File::Temp(suffix => $latest =~ /\d{4}(.*)$/gm);
  39. open my $fh, '>', $tmpfile->filename or die $!;
  40. binmode $fh;
  41. syswrite $fh, $res->content, $res->content_length;
  42. close $fh;
  43.  
  44. # ----------------------------------------
  45.  
  46. if(-d $game_dir) {
  47.    say "Обнаружена старая версия игры. Перемещение в `$backup_dir'...";
  48.    rmtree("$backup_dir") if -d $backup_dir;
  49.    move $game_dir, $backup_dir or die $!;
  50. }
  51.  
  52. say "Распаковка архива...";
  53. my $archive = new Archive::Extract(archive => $tmpfile);
  54. my $tmpdir = File::Temp->newdir;
  55. $archive->extract(to => $tmpdir->dirname);
  56. die $archive->error if $archive->error;
  57.  
  58. say "Перемещение в `$game_dir/'...";
  59. if($archive->is_tgz) {
  60.    move(catdir($tmpdir->dirname, $archive->files->[0]), $game_dir) or die $!;
  61. } else {
  62.    move $tmpdir->dirname, $game_dir or die $!;
  63. }
  64.  
  65. # ----------------------------------------
  66.  
  67. if(-d $backup_dir) {
  68.    say "Копирование сохранений и настроек из старой версии...";
  69.    for my $dir ("save", "config", catdir("data", "font"),
  70.                 catdir("gfx", "MShock32Xotto++"), catdir("data", "sound", "ChestHole")) {
  71.       my($orig, $new) = (catdir($backup_dir, $dir), catdir($game_dir, $dir));
  72.       if(-d $orig) {
  73.          say "$orig -> $new";
  74.          rcopy $orig, $new;# or die $!;
  75.       }
  76.    }
  77. }
  78.  
  79. # ----------------------------------------
  80.  
  81. say "Похоже, что всё прошло нормально.";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement