Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package git-who for openSUSE:Factory checked in at 2026-01-26 11:06:48 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/git-who (Old) and /work/SRC/openSUSE:Factory/.git-who.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "git-who" Mon Jan 26 11:06:48 2026 rev:3 rq:1329127 version:1.3 Changes: -------- --- /work/SRC/openSUSE:Factory/git-who/git-who.changes 2025-08-06 14:34:34.783268913 +0200 +++ /work/SRC/openSUSE:Factory/.git-who.new.1928/git-who.changes 2026-01-26 11:07:37.327278130 +0100 @@ -1,0 +2,10 @@ +Mon Jan 26 06:36:40 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 1.3: + * add NO_COLOR env variable to avoid ansi escape codes + * Add separate DEVELOPMENT.md file. + * Update README.md w/ logo + * add logo in assets + * Update README.md + +------------------------------------------------------------------- Old: ---- git-who-1.2.tar.gz New: ---- git-who-1.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ git-who.spec ++++++ --- /var/tmp/diff_new_pack.n7rwUN/_old 2026-01-26 11:07:37.943303839 +0100 +++ /var/tmp/diff_new_pack.n7rwUN/_new 2026-01-26 11:07:37.943303839 +0100 @@ -17,7 +17,7 @@ Name: git-who -Version: 1.2 +Version: 1.3 Release: 0 Summary: Git blame for file trees License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.n7rwUN/_old 2026-01-26 11:07:37.975305174 +0100 +++ /var/tmp/diff_new_pack.n7rwUN/_new 2026-01-26 11:07:37.979305341 +0100 @@ -3,7 +3,7 @@ <param name="url">https://github.com/sinclairtarget/git-who</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v1.2</param> + <param name="revision">v1.3</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.n7rwUN/_old 2026-01-26 11:07:38.007306510 +0100 +++ /var/tmp/diff_new_pack.n7rwUN/_new 2026-01-26 11:07:38.011306677 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/sinclairtarget/git-who</param> - <param name="changesrevision">9ad01eb363ff2617b1e9da941ec708acc20a6967</param></service></servicedata> + <param name="changesrevision">aa656b041068cc7f83ceeba17fc430bd38fdca9f</param></service></servicedata> (No newline at EOF) ++++++ git-who-1.2.tar.gz -> git-who-1.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-who-1.2/DEVELOPMENT.md new/git-who-1.3/DEVELOPMENT.md --- old/git-who-1.2/DEVELOPMENT.md 1970-01-01 01:00:00.000000000 +0100 +++ new/git-who-1.3/DEVELOPMENT.md 2025-09-17 15:53:47.000000000 +0200 @@ -0,0 +1,26 @@ +# DEVELOPMENT +## Test Repository Submodule +Some of the automated tests for `git-who` need to run against a Git repository. +Test repositories are attached to this repository as submodules. + +If you want to run the automated tests, you will first need to set up the +submodules: + +``` +$ git submodule update --init +``` + +## Automated Tests +The unit and integration tests, written in Go, can be run using: + +``` +$ rake test +``` + +## Functional Tests +There are some end-to-end/functional tests written in Ruby. These require the +`minitest` gem. You can run them using: + +``` +$ rake test:functional +``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-who-1.2/README.md new/git-who-1.3/README.md --- old/git-who-1.2/README.md 2025-07-30 22:17:59.000000000 +0200 +++ new/git-who-1.3/README.md 2025-09-17 15:53:47.000000000 +0200 @@ -1,5 +1,4 @@ -# git-who -  + `git-who` is a command-line tool for answering that eternal question: @@ -10,6 +9,10 @@ codebase. You can think of `git-who` sort of like `git blame` but for file trees rather than individual files. + + + + ## Demo This README contains comprehensive documentation. For an overview, see [Who Will Maintain Vim? A Demo of Git @@ -591,14 +594,10 @@ instead of being attributed to three or four different people with slightly different names? -Git already has a solution for his problem called [Git +Git already has a solution for this problem called [Git mailmap](https://git-scm.com/docs/gitmailmap). If a `.mailmap` file is present in a Git repository, `git who` will respect it. -Note that `git who` will _not_ consult your Git configuration to find your -mailmap file if you have configured a different location for it other than the -conventional `.mailmap` at the root of your repository. - ## Git Blame Ignore Revs If you have a `.git-blame-ignore-revs` file at the root of your repository, `git who` will skip all commits named in that file. The format of the file @@ -657,9 +656,9 @@ The number of **commits** shown for each author is the number of unique commits found while walking the commit log. When supplying a path argument to `git who`, the commits walked include only commits modifying the given path(s). -Here, the rules described under the HISTORY SIMPLIFICATION section of Git log -apply—branches in the commit history that do not modify the given path(s) are -pruned away. +Here, the rules described under the HISTORY SIMPLIFICATION section of the Git log +man page apply—branches in the commit history that do not modify the given path(s) +are pruned away. The number of **files** shown for each author is the number of unique files modified in commits by that author. If a file is renamed, it will count twice. @@ -710,29 +709,7 @@ `git who` answers, "Who made the most modifications to this file / this file tree?" -## DEVELOPMENT -### Test Repository Submodule -Some of the automated tests for `git-who` need to run against a Git repository. -Test repositories are attached to this repository as submodules. - -If you want to run the automated tests, you will first need to set up the -submodules: - -``` -$ git submodule update --init -``` - -### Automated Tests -The unit and integration tests, written in Go, can be run using: - -``` -$ rake test -``` - -### Functional Tests -There are some end-to-end/functional tests written in Ruby. These require the -`minitest` gem. You can run them using: - -``` -$ rake test:functional -``` +## Logo +The logo was designed by [AdrienDSlone](https://github.com/AdrienDSlone) and is +available under [this Creative +Commons license](https://creativecommons.org/licenses/by-sa/4.0/). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-who-1.2/assets/gitwho_logo.svg new/git-who-1.3/assets/gitwho_logo.svg --- old/git-who-1.2/assets/gitwho_logo.svg 1970-01-01 01:00:00.000000000 +0100 +++ new/git-who-1.3/assets/gitwho_logo.svg 2025-09-17 15:53:47.000000000 +0200 @@ -0,0 +1,182 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="304mm" + height="100mm" + viewBox="0 0 304 99.999997" + version="1.1" + id="svg1" + inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" + sodipodi:docname="gitwho_logo_v1.svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + <title + id="title40">git-who-logo-v1</title> + <sodipodi:namedview + id="namedview1" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:document-units="mm" + showguides="false" + inkscape:zoom="0.5" + inkscape:cx="478" + inkscape:cy="653" + inkscape:window-width="1920" + inkscape:window-height="1051" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="layer1-5" + showgrid="false"> + <sodipodi:guide + position="252.83413,79.440224" + orientation="0,-1" + id="guide2" + inkscape:locked="false" /> + <sodipodi:guide + position="21.610244,46.492639" + orientation="1,0" + id="guide3" + inkscape:locked="false" /> + <sodipodi:guide + position="282.63827,39.013542" + orientation="1,0" + id="guide4" + inkscape:locked="false" /> + <sodipodi:guide + position="197.37915,33.56079" + orientation="0,-1" + id="guide5" + inkscape:locked="false" /> + <sodipodi:guide + position="168.14271,61.635417" + orientation="0,-1" + id="guide8" + inkscape:locked="false" /> + <inkscape:grid + id="grid24" + units="mm" + originx="0" + originy="0" + spacingx="1" + spacingy="0.99999999" + empcolor="#0099e5" + empopacity="0.30196078" + color="#0099e5" + opacity="0.14901961" + empspacing="5" + enabled="true" + visible="false" /> + <sodipodi:guide + position="151.37301,73.739282" + orientation="0,-1" + id="guide40" + inkscape:locked="false" /> + <sodipodi:guide + position="226.65658,51.076312" + orientation="1,0" + id="guide41" + inkscape:locked="false" /> + <sodipodi:guide + position="209.96421,48.369372" + orientation="1,0" + id="guide42" + inkscape:locked="false" /> + <sodipodi:guide + position="36.524678,23.584376" + orientation="0,-1" + id="guide43" + inkscape:locked="false" /> + <sodipodi:guide + position="53.494205,99.999994" + orientation="0,-1" + id="guide44" + inkscape:locked="false" /> + <sodipodi:guide + position="0,99.999994" + orientation="1,0" + id="guide45" + inkscape:locked="false" /> + <sodipodi:guide + position="0,-3.2664882e-07" + orientation="0,-1" + id="guide46" + inkscape:locked="false" /> + <sodipodi:guide + position="304,0" + orientation="1,0" + id="guide47" + inkscape:locked="false" /> + </sodipodi:namedview> + <defs + id="defs1" /> + <g + inkscape:label="git-who-logo" + inkscape:groupmode="layer" + id="layer1-5" + transform="matrix(0.72702277,0,0,0.72702277,186.13214,78.047861)"> + <path + id="rect1" + style="display:inline;fill:#55d400;stroke-width:0.129255;-inkscape-stroke:none" + d="m 94.1928,-78.949156 c -2.169439,0.0028 -4.337717,0.836366 -5.997973,2.500782 l -29.968669,30.043292 c -3.320512,3.328831 -3.313566,8.682217 0.01527,12.002731 l 24.923857,24.8619506 6.990993,-6.9562226 a 4.2731974,4.2731974 0 0 1 -0.189106,-1.253359 4.2731974,4.2731974 0 0 1 4.268034,-4.278211 4.2731974,4.2731974 0 0 1 4.278208,4.268035 4.2731974,4.2731974 0 0 1 -4.268033,4.278207 4.2731974,4.2731974 0 0 1 -1.266926,-0.190798 l -6.968922,6.9689642 2.275209,2.2701216 c 3.328836,3.3205173 8.682218,3.3135677 12.002738,-0.015264 l 29.96781,-30.0432898 c 3.32051,-3.328832 3.31442,-8.682214 -0.0144,-12.002731 l -26.66228,-26.595282 -5.254274,5.266986 a 4.2731981,4.2731981 0 0 1 0.188257,1.250816 4.2731981,4.2731981 0 0 1 -0.19165,1.272014 l 10.930857,10.903711 a 4.2731981,4.2731981 0 0 1 1.24148,-0.186563 4.2731981,4.2731981 0 0 1 4.27821,4.268034 4.2731981,4.2731981 0 0 1 -4.26804,4.279058 4.2731981,4.2731981 0 0 1 -1.30933,-0.204371 l -10.90455,10.846049 a 4.3643426,4.273162 8 9.999999 0 1 0.233203,1.414481 4.3643426,4.273162 89.999999 0 1 -4.268038,4.369792 4.3643426,4.273162 89.999999 0 1 -4.278206,-4.358772 4.3643426,4.273162 89.999999 0 1 4.267184,-4.369794 4.3643426,4.273162 89.999999 0 1 1.255055,0.190801 l 10.910482,-10.920668 a 4.2731981,4.2731981 0 0 1 -0.18402,-1.235576 4.2731981,4.2731981 0 0 1 0.19756,-1.289821 L 95.492801,-62.482505 a 4.2731981,4.2731981 0 0 1 -1.247421,0.18826 4.2731981,4.2731981 0 0 1 -1.251664,-0.185715 l -10.879118,10.907104 a 4.2731981,4.2731981 0 0 1 0.18741,1.244877 4.2731981,4.2731981 0 0 1 -4.268033,4.27821 4.2731981,4.2731981 0 0 1 -4.27821,-4.267184 4.2731981,4.2731981 0 0 1 4.268032,-4.279058 4.2731981,4.2731981 0 0 1 1.288977,0.197585 h 8.48e-4 l 10.852802,-10.876601 a 4.2731981,4.2731981 0 0 1 -0.20013,-1.287281 4.2731981,4.2731981 0 0 1 4.268032,-4.27821 4.2731981,4.2731981 0 0 1 1.288977,0.197588 l 5.242387,-5.253426 -0.56901,-0.567318 c -1.664418,-1.660257 -3.834473,-2.488231 -6.003911,-2.485518 z" + inkscape:label="questionMark" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:74.9857px;line-height:1.25;font-family:Aleo;-inkscape-font-specification:Aleo;text-align:start;text-decoration-color:#000000;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#55d400;fill-opacity:1;stroke-width:2.68049;-inkscape-stroke:none" + x="-227.19514" + y="-15.967382" + id="text1" + inkscape:label="git-who"><tspan + sodipodi:role="line" + id="tspan1" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Aleo;-inkscape-font-specification:Aleo;fill:#55d400;fill-opacity:1;stroke-width:2.68049" + x="-227.19514" + y="-15.967382">git-who</tspan></text> + </g> + <metadata + id="metadata40"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <cc:license + rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" /> + <dc:title>git-who-logo-v1</dc:title> + <dc:date>20250822</dc:date> + <dc:creator> + <cc:Agent> + <dc:title>AdrienDSlone</dc:title> + </cc:Agent> + </dc:creator> + <dc:description>Thanks to the font Aleo by Alessio Laiso : https://github.com/AlessioLaiso/aleo +Copyright 2018 The Aleo Project Authors +This Font Software is licensed under the SIL Open Font License, Version 1.1 </dc:description> + </cc:Work> + <cc:License + rdf:about="http://creativecommons.org/licenses/by-sa/4.0/"> + <cc:permits + rdf:resource="http://creativecommons.org/ns#Reproduction" /> + <cc:permits + rdf:resource="http://creativecommons.org/ns#Distribution" /> + <cc:requires + rdf:resource="http://creativecommons.org/ns#Notice" /> + <cc:requires + rdf:resource="http://creativecommons.org/ns#Attribution" /> + <cc:permits + rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /> + <cc:requires + rdf:resource="http://creativecommons.org/ns#ShareAlike" /> + </cc:License> + </rdf:RDF> + </metadata> +</svg> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-who-1.2/internal/pretty/ansi.go new/git-who-1.3/internal/pretty/ansi.go --- old/git-who-1.2/internal/pretty/ansi.go 2025-07-30 22:17:59.000000000 +0200 +++ new/git-who-1.3/internal/pretty/ansi.go 2025-09-17 15:53:47.000000000 +0200 @@ -1,13 +1,72 @@ // ANSI escape codes package pretty -const Reset string = "\x1b[0m" +var colorEnabled = true -const Green string = "\x1b[32m" -const Red string = "\x1b[31m" -const DefaultColor string = "\x1b[39m" +// SetColorEnabled controls whether ANSI color codes are output +func SetColorEnabled(enabled bool) { + colorEnabled = enabled +} -const Dim string = "\x1b[2m" -const Invert string = "\x1b[7m" +// GetColorEnabled returns whether ANSI color codes are currently enabled +func GetColorEnabled() bool { + return colorEnabled +} +const resetCode string = "\x1b[0m" +const greenCode string = "\x1b[32m" +const redCode string = "\x1b[31m" +const defaultColorCode string = "\x1b[39m" +const dimCode string = "\x1b[2m" +const invertCode string = "\x1b[7m" + +// Reset returns the reset ANSI code if colors are enabled, empty string otherwise +func Reset() string { + if colorEnabled { + return resetCode + } + return "" +} + +// Green returns the green ANSI code if colors are enabled, empty string otherwise +func Green() string { + if colorEnabled { + return greenCode + } + return "" +} + +// Red returns the red ANSI code if colors are enabled, empty string otherwise +func Red() string { + if colorEnabled { + return redCode + } + return "" +} + +// DefaultColor returns the default color ANSI code if colors are enabled, empty string otherwise +func DefaultColor() string { + if colorEnabled { + return defaultColorCode + } + return "" +} + +// Dim returns the dim ANSI code if colors are enabled, empty string otherwise +func Dim() string { + if colorEnabled { + return dimCode + } + return "" +} + +// Invert returns the invert ANSI code if colors are enabled, empty string otherwise +func Invert() string { + if colorEnabled { + return invertCode + } + return "" +} + +// EraseLine always returns the erase line code as it's used for progress indicators const EraseLine string = "\x1b[2K" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-who-1.2/internal/subcommands/hist.go new/git-who-1.3/internal/subcommands/hist.go --- old/git-who-1.2/internal/subcommands/hist.go 2025-07-30 22:17:59.000000000 +0200 +++ new/git-who-1.3/internal/subcommands/hist.go 2025-09-17 15:53:47.000000000 +0200 @@ -184,10 +184,10 @@ "%s ┤ %s%s%-*s%s %s\n", bucket.Name, valueBar, - pretty.Dim, + pretty.Dim(), barWidth-clampedValue, totalBar, - pretty.Reset, + pretty.Reset(), tallyPart, ) @@ -213,12 +213,12 @@ case tally.LinesMode: metric = fmt.Sprintf( "(%s%s%s / %s%s%s)", - pretty.Green, + pretty.Green(), format.Number(t.LinesAdded), - pretty.DefaultColor, - pretty.Red, + pretty.DefaultColor(), + pretty.Red(), format.Number(t.LinesRemoved), - pretty.DefaultColor, + pretty.DefaultColor(), ) default: panic("unrecognized tally mode in switch") @@ -234,10 +234,10 @@ if fade { return fmt.Sprintf( "%s%s %s%s", - pretty.Dim, + pretty.Dim(), author, metric, - pretty.Reset, + pretty.Reset(), ) } else { return fmt.Sprintf("%s %s", author, metric) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-who-1.2/internal/subcommands/table.go new/git-who-1.3/internal/subcommands/table.go --- old/git-who-1.2/internal/subcommands/table.go 2025-07-30 22:17:59.000000000 +0200 +++ new/git-who-1.3/internal/subcommands/table.go 2025-09-17 15:53:47.000000000 +0200 @@ -314,17 +314,17 @@ for i, t := range tallies { alternating := "" if totalRows > maxBeforeColorAlternating && i%2 == 1 { - alternating = pretty.Invert + alternating = pretty.Invert() } lines := fmt.Sprintf( "%s%7s%s / %s%7s%s", - pretty.Green, + pretty.Green(), format.Number(t.LinesAdded), - pretty.DefaultColor, - pretty.Red, + pretty.DefaultColor(), + pretty.Red(), format.Number(t.LinesRemoved), - pretty.DefaultColor, + pretty.DefaultColor(), ) if mode == tally.LinesMode || mode == tally.FilesMode { @@ -336,7 +336,7 @@ format.Number(t.Commits), format.Number(t.FileCount), lines, - pretty.Reset, + pretty.Reset(), ) } else if mode == tally.FirstModifiedMode { fmt.Printf( @@ -345,7 +345,7 @@ formatAuthor(t, showEmail, colwidth-22), format.RelativeTime(progStart, t.FirstCommitTime), format.Number(t.Commits), - pretty.Reset, + pretty.Reset(), ) } else { fmt.Printf( @@ -354,7 +354,7 @@ formatAuthor(t, showEmail, colwidth-22), format.RelativeTime(progStart, t.LastCommitTime), format.Number(t.Commits), - pretty.Reset, + pretty.Reset(), ) } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-who-1.2/internal/subcommands/tree.go new/git-who-1.3/internal/subcommands/tree.go --- old/git-who-1.2/internal/subcommands/tree.go 2025-07-30 22:17:59.000000000 +0200 +++ new/git-who-1.3/internal/subcommands/tree.go 2025-09-17 15:53:47.000000000 +0200 @@ -315,12 +315,12 @@ case tally.LinesMode: return fmt.Sprintf( "(%s%s%s / %s%s%s)", - pretty.Green, + pretty.Green(), format.Number(t.LinesAdded), - pretty.DefaultColor, - pretty.Red, + pretty.DefaultColor(), + pretty.Red(), format.Number(t.LinesRemoved), - pretty.DefaultColor, + pretty.DefaultColor(), ) case tally.LastModifiedMode: return fmt.Sprintf( @@ -356,7 +356,7 @@ var path string if line.dimPath { - path = fmt.Sprintf("%s%s%s", pretty.Dim, line.path, pretty.Reset) + path = fmt.Sprintf("%s%s%s", pretty.Dim(), line.path, pretty.Reset()) } else { path = line.path } @@ -382,9 +382,9 @@ "%s%s%s%s%s%s %s\n", line.indent, path, - pretty.Dim, + pretty.Dim(), separator, - pretty.Reset, + pretty.Reset(), author, line.metric, ) @@ -393,11 +393,11 @@ "%s%s%s%s%s %s%s\n", line.indent, path, - pretty.Dim, + pretty.Dim(), separator, author, line.metric, - pretty.Reset, + pretty.Reset(), ) } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-who-1.2/main.go new/git-who-1.3/main.go --- old/git-who-1.2/main.go 2025-07-30 22:17:59.000000000 +0200 +++ new/git-who-1.3/main.go 2025-09-17 15:53:47.000000000 +0200 @@ -9,6 +9,7 @@ "strings" "github.com/sinclairtarget/git-who/internal/git" + "github.com/sinclairtarget/git-who/internal/pretty" "github.com/sinclairtarget/git-who/internal/subcommands" "github.com/sinclairtarget/git-who/internal/tally" "github.com/sinclairtarget/git-who/internal/utils/flagutils" @@ -40,6 +41,7 @@ versionFlag := mainFlagSet.Bool("version", false, "Print version and exit") verboseFlag := mainFlagSet.Bool("v", false, "Enables debug logging") + colorFlag := mainFlagSet.Bool("color", false, "Force enable ANSI color output (overrides NO_COLOR env var)") mainFlagSet.Usage = func() { fmt.Println("Usage: git-who [-v] [subcommand] [subcommand options...]") @@ -71,7 +73,7 @@ loop: for subcmdIndex < len(os.Args) { switch os.Args[subcmdIndex] { - case "-version", "--version", "-v", "--v", "-h", "--help": + case "-version", "--version", "-v", "--v", "-h", "--help", "-color", "--color": subcmdIndex += 1 default: break loop @@ -85,6 +87,14 @@ return } + // Handle color settings according to NO_COLOR spec + // Priority: --color flag > NO_COLOR env var > default (enabled) + if *colorFlag { + pretty.SetColorEnabled(true) + } else if noColor, exists := os.LookupEnv("NO_COLOR"); exists && noColor != "" { + pretty.SetColorEnabled(false) + } + if *verboseFlag { configureLogging(slog.LevelDebug) logger().Debug("log level set to DEBUG") ++++++ vendor.tar.gz ++++++
