lib/CacheCopyer.cc

Code
Comments
Other
Rev Date Author Line
1293 14 Nov 10 peter 1 // $Id$
1293 14 Nov 10 peter 2
1293 14 Nov 10 peter 3 /*
1635 30 Mar 23 peter 4   Copyright (C) 2010, 2011, 2012, 2023 Peter Johansson
1293 14 Nov 10 peter 5
1293 14 Nov 10 peter 6   This file is part of svndigest, http://dev.thep.lu.se/svndigest
1293 14 Nov 10 peter 7
1293 14 Nov 10 peter 8   svndigest is free software; you can redistribute it and/or modify it
1293 14 Nov 10 peter 9   under the terms of the GNU General Public License as published by
1293 14 Nov 10 peter 10   the Free Software Foundation; either version 3 of the License, or
1293 14 Nov 10 peter 11   (at your option) any later version.
1293 14 Nov 10 peter 12
1293 14 Nov 10 peter 13   svndigest is distributed in the hope that it will be useful, but
1293 14 Nov 10 peter 14   WITHOUT ANY WARRANTY; without even the implied warranty of
1293 14 Nov 10 peter 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1293 14 Nov 10 peter 16   General Public License for more details.
1293 14 Nov 10 peter 17
1293 14 Nov 10 peter 18   You should have received a copy of the GNU General Public License
1293 14 Nov 10 peter 19   along with svndigest. If not, see <http://www.gnu.org/licenses/>.
1293 14 Nov 10 peter 20 */
1293 14 Nov 10 peter 21
1619 12 Mar 23 peter 22 #include <config.h>
1619 12 Mar 23 peter 23
1293 14 Nov 10 peter 24 #include "CacheCopyer.h"
1293 14 Nov 10 peter 25
1293 14 Nov 10 peter 26 #include "Directory.h"
1293 14 Nov 10 peter 27 #include "File.h"
1293 14 Nov 10 peter 28 #include "NodeVisitor.h"
1321 28 Nov 10 peter 29 #include "utility.h"
1293 14 Nov 10 peter 30
1673 26 Aug 23 peter 31 #include <yat/utility/Exception.h>
1675 26 Aug 23 peter 32 #include <yat/utility/utility.h>
1293 14 Nov 10 peter 33
1293 14 Nov 10 peter 34 #include <sstream>
1293 14 Nov 10 peter 35 #include <string>
1293 14 Nov 10 peter 36
1508 31 Aug 12 peter 37 #include <iostream>
1508 31 Aug 12 peter 38
1293 14 Nov 10 peter 39 namespace theplu {
1293 14 Nov 10 peter 40 namespace svndigest {
1293 14 Nov 10 peter 41
1293 14 Nov 10 peter 42   CacheCopyer::CacheCopyer(const std::string& target, bool verbose)
1293 14 Nov 10 peter 43     : NodeVisitor(), target_(target), verbose_(verbose)
1293 14 Nov 10 peter 44   {}
1293 14 Nov 10 peter 45
1293 14 Nov 10 peter 46
1508 31 Aug 12 peter 47   void
1508 31 Aug 12 peter 48   CacheCopyer::copy(const std::string& src, const std::string& trg_dir) const
1293 14 Nov 10 peter 49   {
1508 31 Aug 12 peter 50     if (!node_exist(src))
1508 31 Aug 12 peter 51       return;
1508 31 Aug 12 peter 52     if (access_rights(src, "r"))
1508 31 Aug 12 peter 53       throw yat::utility::errno_error("'" + src + "': ");
1508 31 Aug 12 peter 54     std::string target_file =
1675 26 Aug 23 peter 55       concatenate_path(trg_dir, yat::utility::basename(src));
1508 31 Aug 12 peter 56
1508 31 Aug 12 peter 57     if (verbose_)
1508 31 Aug 12 peter 58       std::cout << src << " -> " << target_file << "\n";
1675 26 Aug 23 peter 59     yat::utility::copy_file(src, target_file);
1508 31 Aug 12 peter 60   }
1508 31 Aug 12 peter 61
1508 31 Aug 12 peter 62
1508 31 Aug 12 peter 63   bool CacheCopyer::enter(Directory& dir)
1508 31 Aug 12 peter 64   {
1449 22 Dec 11 peter 65     if (dir.svndigest_ignore() && dir.svncopyright_ignore())
1293 14 Nov 10 peter 66       return false;
1293 14 Nov 10 peter 67
1293 14 Nov 10 peter 68     std::string target_dir = concatenate_path(target_, dir.local_path());
1293 14 Nov 10 peter 69     if (!node_exist(target_dir)) {
1293 14 Nov 10 peter 70       throw yat::utility::errno_error(target_dir + ": ");
1293 14 Nov 10 peter 71     }
1675 26 Aug 23 peter 72     yat::utility::mkdir_p(concatenate_path(target_dir, ".svndigest"));
1293 14 Nov 10 peter 73     return true;
1293 14 Nov 10 peter 74   }
1293 14 Nov 10 peter 75
1508 31 Aug 12 peter 76
1508 31 Aug 12 peter 77   void CacheCopyer::leave(Directory& dir)
1293 14 Nov 10 peter 78   {
1293 14 Nov 10 peter 79   }
1293 14 Nov 10 peter 80
1508 31 Aug 12 peter 81
1293 14 Nov 10 peter 82   void CacheCopyer::visit(File& file)
1293 14 Nov 10 peter 83   {
1449 22 Dec 11 peter 84     if (file.svndigest_ignore() && file.svncopyright_ignore())
1293 14 Nov 10 peter 85       return;
1293 14 Nov 10 peter 86     std::string src_file = file.cache_name();
1508 31 Aug 12 peter 87
1508 31 Aug 12 peter 88     std::string target_dir =
1508 31 Aug 12 peter 89       concatenate_path(target_,
1675 26 Aug 23 peter 90                        yat::utility::dirname(file.local_path())+"/.svndigest");
1508 31 Aug 12 peter 91
1508 31 Aug 12 peter 92     if (!file.svndigest_ignore())
1508 31 Aug 12 peter 93       copy(src_file, target_dir);
1508 31 Aug 12 peter 94
1675 26 Aug 23 peter 95     yat::utility::replace(src_file, "svndigest-cache", "svncopyright-cache");
1508 31 Aug 12 peter 96     if (!file.svncopyright_ignore())
1508 31 Aug 12 peter 97       copy(src_file, target_dir);
1508 31 Aug 12 peter 98
1293 14 Nov 10 peter 99   }
1293 14 Nov 10 peter 100
1293 14 Nov 10 peter 101 }} // end of namespace svndigest and namespace theplu