SlHelpers
Maintainers.h
1 // SPDX-License-Identifier: GPL-2.0-only
2 
3 #pragma once
4 
5 #include <filesystem>
6 #include <set>
7 #include <string>
8 #include <vector>
9 
10 #include "Stanza.h"
11 
12 namespace SlKernCVS {
13 
19 class Maintainers {
20 public:
22  using MaintainersType = std::vector<Stanza>;
23 
33  Maintainers(const std::filesystem::path &SUSE,
34  const std::filesystem::path &linuxRepo,
35  const std::string &origin,
36  const Stanza::TranslateEmail &translateEmail) {
37  loadSUSE(SUSE, translateEmail);
38 
39  if (!linuxRepo.empty())
40  loadUpstream(linuxRepo, origin, translateEmail);
41  }
42 
48  const Stanza *findBestMatch(const std::set<std::filesystem::path> &paths) const {
49  return findBestMatchInMaintainers(m_maintainers, paths);
50  }
56  const Stanza *findBestMatchUpstream(const std::set<std::filesystem::path> &paths) const {
57  return findBestMatchInMaintainers(m_upstream_maintainers, paths);
58  }
59 
64  const MaintainersType &maintainers() const { return m_maintainers; }
69  const MaintainersType &upstream_maintainers() const { return m_upstream_maintainers; }
74  const std::set<std::string> &suse_users() const { return m_suse_users; }
75 private:
76  void loadSUSE(const std::filesystem::path &filename,
77  const Stanza::TranslateEmail &translateEmail);
78  void loadUpstream(const std::filesystem::path &lsource, const std::string &origin,
79  const Stanza::TranslateEmail &translateEmail);
80 
81  static const Stanza *findBestMatchInMaintainers(const MaintainersType &sl,
82  const std::set<std::filesystem::path> &paths);
83 
84  MaintainersType m_maintainers;
85  MaintainersType m_upstream_maintainers;
86  std::set<std::string> m_suse_users;
87 };
88 
89 }
Stanza (a subsystem) from MAINTAINERS file.
Definition: Stanza.h:23
std::function< std::string(std::string_view sv)> TranslateEmail
Callback to translate an e-mail.
Definition: Stanza.h:26
const std::set< std::string > & suse_users() const
Get all met SUSE users.
Definition: Maintainers.h:74
Loads and holds information from both Linux and SUSE MAINTAINERS files.
Definition: Maintainers.h:19
Maintainers(const std::filesystem::path &SUSE, const std::filesystem::path &linuxRepo, const std::string &origin, const Stanza::TranslateEmail &translateEmail)
Load maintainers info.
Definition: Maintainers.h:33
const MaintainersType & maintainers() const
Get all parsed SUSE maintainers.
Definition: Maintainers.h:64
Definition: Branches.h:15
const MaintainersType & upstream_maintainers() const
Get all parsed Linux maintainers.
Definition: Maintainers.h:69
const Stanza * findBestMatchUpstream(const std::set< std::filesystem::path > &paths) const
Find the best matched maintainer from the Linux&#39;s MAINTAINERS file.
Definition: Maintainers.h:56
std::vector< Stanza > MaintainersType
Maintainers are a list of stanzas.
Definition: Maintainers.h:22
const Stanza * findBestMatch(const std::set< std::filesystem::path > &paths) const
Find the best matched maintainer from the SUSE&#39;s MAINTAINERS file.
Definition: Maintainers.h:48