CernVM-FS  2.9.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
repository_tags.cc
Go to the documentation of this file.
1 
5 #include "cvmfs_config.h"
6 #include "publish/repository.h"
7 
8 #include <vector>
9 
10 #include "history_sqlite.h"
11 #include "publish/except.h"
12 #include "sanitizer.h"
13 
14 namespace publish {
15 
16 void Publisher::CheckTagName(const std::string &name) {
17  if (name.empty()) throw EPublish("the empty string is not a valid tag name");
18  if (name == "trunk")
19  throw EPublish("'trunk' is not allowed as a custom tag name");
20  if (name == "trunk-previous")
21  throw EPublish("'trunk-previous' is not allowed as a custom tag name");
22  if (!sanitizer::TagSanitizer().IsValid(name))
23  throw EPublish("invalid tag name: " + name);
24 }
25 
26 
27 void Publisher::EditTags(const std::vector<history::History::Tag> &add_tags,
28  const std::vector<std::string> &rm_tags)
29 {
30  if (!in_transaction_) throw EPublish("cannot edit tags outside transaction");
31 
32  for (unsigned i = 0; i < add_tags.size(); ++i) {
33  std::string name = add_tags[i].name;
34  CheckTagName(name);
35  history_->Insert(add_tags[i]);
36  }
37 
38  for (unsigned i = 0; i < rm_tags.size(); ++i) {
39  std::string name = rm_tags[i];
40  CheckTagName(name);
41  if (history_->Exists(name)) {
42  bool retval = history_->Remove(name);
43  if (!retval) throw EPublish("cannot remove tag " + name);
44  }
45  }
46 
47  PushHistory();
48 
49  // TODO(jblomer): virtual catalog
50 }
51 
52 } // namespace publish
bool in_transaction_
Definition: repository.h:364
bool Remove(const std::string &name)
bool Exists(const std::string &name) const
void PushHistory()
Definition: repository.cc:361
bool Insert(const Tag &tag)
void EditTags(const std::vector< history::History::Tag > &add_tags, const std::vector< std::string > &rm_tags)
history::SqliteHistory * history_
Definition: repository.h:148
void CheckTagName(const std::string &name)