#!/usr/bin/ruby

DEBUG=false

class RpmDumpIfNeeded
   def initialize
     @packages_files = %w{
        /usr/lib/sysimage/rpm/Packages.db
        /var/lib/rpm/Packages
     }
     @packages_file = get_packages_file
     @packages_mtime = File.mtime(@packages_file)

     @backup_file = '/root/installed-packages-for-restic'
     if File.exist? @backup_file
       @backup_mtime = File.mtime(@backup_file)
       @needed = (@packages_mtime > @backup_mtime)
     else
       @needed = true
     end
     if DEBUG
     STDERR.puts "#{@packages_file} #{@packages_mtime} #{@packages_mtime.class}"
     STDERR.puts "#{@backup_file} #{@backup_mtime} #{@backup_mtime.class}"
     STDERR.puts "@needed #{@needed}"
     end
   end

   def dump
      if @needed
        STDERR.puts("[RPM Dump DB] Running backup of rpm list")
        system("zypper se -i | awk '/^i\\+/ {print $3}' | sort > #{@backup_file}")
      else
        STDERR.puts("[RPM Dump DB] Nothing to do")
      end
   end

   def get_packages_file
     @packages_files.each do |fname|
       return fname if File.exist? fname
     end
   end
end

RpmDumpIfNeeded.new.dump
