class Borgmatic < Formula include Language::Python::Virtualenv desc "Simple wrapper script for the Borg backup software" homepage "https://torsion.org/borgmatic/" url "https://github.com/witten/borgmatic/archive/1.4.21.tar.gz" sha256 "1c1c6fe0d0c461bdfe6f173b7cf12628c5142b886a45ce62ab2ec9a3a990b804" bottle do cellar :any sha256 "a972a895a1827e07a86acfbe659ab2c56b077bb3f04926c3509eb91010bcf0ea" => :catalina sha256 "af66a58a8b04c830b08729c595ae8affdc91e88f897aad389149afa3e176afc1" => :mojave sha256 "83b65e236a363c214fadfacd63cebe76f3854a89291d643e07cb5fb1eddd0fc9" => :high_sierra end depends_on "libyaml" depends_on "python" resource "certifi" do url "https://files.pythonhosted.org/packages/41/bf/9d214a5af07debc6acf7f3f257265618f1db242a3f8e49a9b516f24523a6/certifi-2019.11.28.tar.gz" sha256 "25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f" end resource "chardet" do url "https://files.pythonhosted.org/packages/fc/bb/a5768c230f9ddb03acc9ef3f0d4a3cf93462473795d18e9535498c8f929d/chardet-3.0.4.tar.gz" sha256 "84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae" end resource "colorama" do url "https://files.pythonhosted.org/packages/82/75/f2a4c0c94c85e2693c229142eb448840fba0f9230111faa889d1f541d12d/colorama-0.4.3.tar.gz" sha256 "e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1" end resource "docopt" do url "https://files.pythonhosted.org/packages/source/d/docopt/docopt-0.6.2.tar.gz" sha256 "49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491" end resource "idna" do url "https://files.pythonhosted.org/packages/ad/13/eb56951b6f7950cadb579ca166e448ba77f9d24efc03edd7e55fa57d04b7/idna-2.8.tar.gz" sha256 "c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407" end resource "PyYAML" do url "https://files.pythonhosted.org/packages/8d/c9/e5be955a117a1ac548cdd31e37e8fd7b02ce987f9655f5c7563c656d5dcb/PyYAML-5.2.tar.gz" sha256 "c0ee8eca2c582d29c3c2ec6e2c4f703d1b7f1fb10bc72317355a746057e7346c" end resource "pykwalify" do url "https://files.pythonhosted.org/packages/53/6a/c7394df238816085de6a630f1817805639e844ea7980108f19261cd44c12/pykwalify-1.7.0.tar.gz" sha256 "7e8b39c5a3a10bc176682b3bd9a7422c39ca247482df198b402e8015defcceb2" end resource "python-dateutil" do url "https://files.pythonhosted.org/packages/be/ed/5bbc91f03fa4c839c4c7360375da77f9659af5f7086b7a7bdda65771c8e0/python-dateutil-2.8.1.tar.gz" sha256 "73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c" end resource "requests" do url "https://files.pythonhosted.org/packages/01/62/ddcf76d1d19885e8579acb1b1df26a852b03472c0e46d2b959a714c90608/requests-2.22.0.tar.gz" sha256 "11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4" end resource "ruamel.yaml" do url "https://files.pythonhosted.org/packages/de/76/cf97d739365eff258e2af0457a150bf2818f3eaa460328610eafeed0894a/ruamel.yaml-0.16.5.tar.gz" sha256 "412a6f5cfdc0525dee6a27c08f5415c7fd832a7afcb7a0ed7319628aed23d408" end resource "six" do url "https://files.pythonhosted.org/packages/94/3e/edcf6fef41d89187df7e38e868b2dd2182677922b600e880baad7749c865/six-1.13.0.tar.gz" sha256 "30f610279e8b2578cab6db20741130331735c781b56053c59c4076da27f06b66" end resource "urllib3" do url "https://files.pythonhosted.org/packages/ad/fc/54d62fa4fc6e675678f9519e677dfc29b8964278d75333cf142892caf015/urllib3-1.25.7.tar.gz" sha256 "f3c5fd51747d450d4dcf6f923c81f78f811aab8205fda64b0aba34a4e48b0745" end def install virtualenv_install_with_resources end test do borg = (testpath/"borg") config_path = testpath/"config.yml" repo_path = testpath/"repo" log_path = testpath/"borg.log" # Create a fake borg executable to log requested commands borg.write <<~EOS #!/bin/sh echo $@ >> #{log_path} # Return error on info so we force an init to occur if [ "$1" = "info" ]; then exit 2 fi EOS borg.chmod 0755 # Generate a config system bin/"generate-borgmatic-config", "--destination", config_path # Replace defaults values config_content = File.read(config_path) .gsub(/# ?local_path: borg1/, "local_path: #{borg}") .gsub(/user@backupserver:sourcehostname.borg/, repo_path) File.open(config_path, "w") { |file| file.puts config_content } # Initialize Repo system bin/"borgmatic", "-v", "2", "--config", config_path, "--init", "--encryption", "repokey" # Create a backup system bin/"borgmatic", "--config", config_path # See if backup was created system bin/"borgmatic", "--config", config_path, "--list", "--json" # Read in stored log log_content = File.read(log_path) # Assert that the proper borg commands were executed assert_equal <<~EOS, log_content info --debug #{repo_path} init --encryption repokey --debug #{repo_path} prune --keep-daily 7 --prefix {hostname}- #{repo_path} create #{repo_path}::{hostname}-{now:%Y-%m-%dT%H:%M:%S.%f} /home /etc /var/log/syslog* check --prefix {hostname}- #{repo_path} list --json #{repo_path} EOS end end