Skip to content

Commit

Permalink
format: Show locally installed version on Long format
Browse files Browse the repository at this point in the history
Similar to cower, provide the locally installed version as part of the
Long format output.

Addresses part of #5.
  • Loading branch information
falconindy committed Jul 5, 2017
1 parent 3ed438f commit cbeaaf2
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 9 deletions.
10 changes: 6 additions & 4 deletions src/auracle.cc
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,11 @@ int ErrorNotEnoughArgs() {
}

template <typename Container>
void FormatLong(std::ostream& os, const Container& packages) {
void FormatLong(std::ostream& os, const Container& packages,
const dlr::Pacman* pacman) {
for (const auto& p : packages) {
os << format::Long(p);
auto local_pkg = pacman->GetLocalPackage(p.name);
os << format::Long(p, std::get_if<dlr::Pacman::Package>(&local_pkg));
}
}

Expand Down Expand Up @@ -158,12 +160,12 @@ int Auracle::Info(const std::vector<PackageOrDependency>& args) {
}

aur_.QueueRpcRequest(
&request, [](aur::HttpStatusOr<aur::RpcResponse> response) {
&request, [this](aur::HttpStatusOr<aur::RpcResponse> response) {
if (!response.ok()) {
std::cerr << "error: request failed: " << response.error()
<< std::endl;
} else {
FormatLong(std::cout, response.value().results);
FormatLong(std::cout, response.value().results, pacman_);
}
return 0;
});
Expand Down
31 changes: 29 additions & 2 deletions src/format.cc
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,34 @@ std::ostream& FormatFieldValue(std::ostream& os, const std::string_view field,
return os;
}

struct Version {
const aur::Package* p = nullptr;
const dlr::Pacman::Package* l = nullptr;
};

std::ostream& FormatFieldValue(
std::ostream& os, const std::string_view field,
const Version& version) {
const auto* p = version.p;
const auto* l = version.l;

namespace t = terminal;
const auto aur_ver_color = p->out_of_date ? &t::BoldRed : &t::BoldGreen;

os << Field(field) << aur_ver_color(p->version);

if (l != nullptr) {
const auto local_ver_color = dlr::Pacman::Vercmp(l->pkgver, p->version) < 0
? &t::BoldRed
: &t::BoldGreen;
os << " [installed: " << local_ver_color(l->pkgver) << "]";
}

os << std::endl;

return os;
}

} // namespace

std::ostream& operator<<(std::ostream& os, const NameOnly& n) {
Expand All @@ -207,11 +235,10 @@ std::ostream& operator<<(std::ostream& os, const Long& l) {
namespace t = terminal;

const auto& p = l.package;
const auto ood_color = p.out_of_date ? &t::BoldRed : &t::BoldGreen;

os << FieldValue("Repository", t::BoldMagenta("aur"));
os << FieldValue("Name", p.name);
os << FieldValue("Version", ood_color(p.version));
os << FieldValue("Version", Version{&l.package, l.local_package});

if (p.name != p.pkgbase) {
os << FieldValue("PackageBase", p.pkgbase);
Expand Down
9 changes: 6 additions & 3 deletions src/format.hh
Original file line number Diff line number Diff line change
Expand Up @@ -31,19 +31,22 @@ struct Short {
};

struct Long {
Long(const aur::Package& package) : package(package) {}
Long(const aur::Package& package, const dlr::Pacman::Package* local_package)
: package(package), local_package(local_package) {}
~Long() = default;

friend std::ostream& operator<<(std::ostream& os, const Long& f);

private:
const aur::Package& package;
const dlr::Pacman::Package* local_package;
};

struct Update {
Update(const dlr::Pacman::Package& from, const aur::Package& to) : from(from), to(to) {}
Update(const dlr::Pacman::Package& from, const aur::Package& to)
: from(from), to(to) {}

friend std::ostream& operator<<(std::ostream& os, const Update& u);
friend std::ostream& operator<<(std::ostream& os, const Update& u);

private:
const dlr::Pacman::Package& from;
Expand Down

0 comments on commit cbeaaf2

Please sign in to comment.