From patchwork Fri Jul 31 16:00:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Sebastian Jakubiak X-Patchwork-Id: 1740 Return-Path: Delivered-To: patchwork@archlinux.org Received: from apollo.archlinux.org (localhost [127.0.0.1]) by apollo.archlinux.org (Postfix) with ESMTP id 1249C1A42616D for ; Fri, 31 Jul 2020 16:00:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on apollo.archlinux.org X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=DKIM_ADSP_CUSTOM_MED=0.001, DKIM_INVALID=1,DKIM_SIGNED=0.1,FREEMAIL_FROM=0.5,MAILING_LIST_MULTI=-1, RCVD_IN_DNSWL_MED=-2.3,SPF_HELO_NONE=0.001,T_DMARC_POLICY_NONE=0.01, T_DMARC_SIMPLE_DKIM=0.01 autolearn=ham autolearn_force=no version=3.4.4 X-Spam-BL-Results: [127.0.9.2] Received: from orion.archlinux.org (orion.archlinux.org [IPv6:2a01:4f8:160:6087::1]) by apollo.archlinux.org (Postfix) with ESMTPS for ; Fri, 31 Jul 2020 16:00:58 +0000 (UTC) Received: from orion.archlinux.org (localhost [127.0.0.1]) by orion.archlinux.org (Postfix) with ESMTP id B34621D364B148; Fri, 31 Jul 2020 16:00:56 +0000 (UTC) Authentication-Results: luna.archlinux.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GchHIxcx Authentication-Results: orion.archlinux.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GchHIxcx DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=HMzi+tCIBrHE0hR9mgM7XnfHrYnI5PiiAhR6a3ty9ys=; b=GchHIxcxAxYKZVMKMilPfFOXbHWLnR6Hrr6INUQqsX9m9aBZcpOASlCG/W14GRULM8 /TQXBcCGMe/8JA1Q9A7Ibdx9/8kQBA4spm7uQ+1uGJzoIOLwYJQDYDFpYCa3W3r1W9s/ 70bFCuDx7S+bkBMQKr/BzO5S4+eFM7rSXxoLUV1+dLRbuoFUOSimDhTv5qCpsV9LZBCF USSI0pPydKavl6ezNdgpr7kLcEiBIlfNlQd87SJDQn0PpF7DQiJ5hHSIxXC/yjLDlfzk wsW9hp8ka6SzAEtvhySgRXHJuTOcJcMiqXT5sONoRKJ2uObJT3dq7P2jXxqhh9DBpqbI uZMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=HMzi+tCIBrHE0hR9mgM7XnfHrYnI5PiiAhR6a3ty9ys=; b=F+Ah2iuML2aTLrclXhXSZFdtDgZ44iBzN3GuuRAjBMC4Fzaocg5G+tfdrkKnMy4BiG j5MBx+UIL3IGsjF8vaGYk9/GqJTMVPVruCeV9x5uFtrMKR/zkpOx5dB/mZh3JP1gRhs3 hHlhV20jBzV4nRzpTljTX4yfDtvaKKNKVHLYeVQFa4GhFbshH+ZF+Wj/cyeqTJ1d3Lu3 hi9z/Hpk6Mc0WtL2J3HysOXoDmiiuJeJNxhqULYnlZBEeY01eh7YNAk0R0GwJae/ecq7 UCsB5I48d7YP4QZXIHxMFh4o7LGkW11lnq+Q018GnYqCVgLhzQMuoSP3+G7zwLFunkFJ U/kg== X-Gm-Message-State: AOAM530o2CsTJe/BsFXZCNC95KiVefYVPpuVn+AST1ljUzh3lsucQi6f j/7lAWE0LFv/kYKByZf5wSRDxQYE X-Google-Smtp-Source: ABdhPJyghLuBBuEhxlruSrXbvweTeNDWxs7+u0l7iHiVexbGDmz85OdUDWP6XYH7OXGIMzgtFi9QLw== X-Received: by 2002:a17:906:ca4f:: with SMTP id jx15mr4915419ejb.449.1596211249404; Fri, 31 Jul 2020 09:00:49 -0700 (PDT) From: Sebastian Jakubiak To: pacman-contrib@lists.archlinux.org Subject: [PATCH] pactree: Compress self-provided optional dependencies Date: Fri, 31 Jul 2020 18:00:29 +0200 Message-Id: <20200731160029.34268-1-jakseb.dev@gmail.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 X-BeenThere: pacman-contrib@lists.archlinux.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Discussion list for pacman-contrib development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: pacman-contrib-bounces@lists.archlinux.org Sender: "pacman-contrib" Remove `provides X` from `X provides X: ...` lines describing optional dependencies to make the output more compact. Signed-off-by: Sebastian Jakubiak --- I noticed that most optional dependencies in the output of `pactree --optional` have this unneeded repetition. With this patch the following: vim-runtime ├─bash provides sh: support for some tools and macros (optional) ├─python provides python: demoserver example tool (optional) └─gawk provides gawk: mve tools upport (optional) will change to: vim-runtime ├─bash provides sh: support for some tools and macros (optional) ├─python: demoserver example tool (optional) └─gawk: mve tools upport (optional) src/pactree.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/pactree.c b/src/pactree.c index e34ecc8..4bd4601 100644 --- a/src/pactree.c +++ b/src/pactree.c @@ -383,6 +383,14 @@ static int parse_options(int argc, char *argv[]) return 0; } +int pkg_provides_itself(const char *pkg, const char *depstring) +{ + size_t pkglen = strlen(pkg); + return (strncmp(pkg, depstring, pkglen) == 0 && + (depstring[pkglen] == '\0' || + strncmp(": ", depstring + pkglen, 2) == 0)); +} + /* pkg provides provision */ static void print_text(const char *pkg, const char *provision, tdepth *depth, int last, int opt_dep) @@ -419,12 +427,12 @@ static void print_text(const char *pkg, const char *provision, if(!pkg && provision) { printf("%s%s%s%s [unresolvable]%s%s\n", tip, color->leaf1, provision, color->branch1, opt_str, color->off); - } else if(provision && strcmp(pkg, provision) != 0 && *(style->provides) != '\0') { + } else if(provision && *(style->provides) != '\0' && !pkg_provides_itself(pkg, provision)) { printf("%s%s%s%s%s %s%s%s%s\n", tip, color->leaf1, pkg, color->leaf2, style->provides, color->leaf1, provision, opt_str, color->off); } else { - printf("%s%s%s%s%s\n", tip, color->leaf1, pkg, opt_str, color->off); + printf("%s%s%s%s%s\n", tip, color->leaf1, (provision ? provision : pkg), opt_str, color->off); } }