git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: Merging submodules (was Re: Feature suggestion: git-hist)
@ 2008-07-30 23:03 Brian Gernhardt
  2008-07-31  7:21 ` H.Merijn Brand
  0 siblings, 1 reply; 19+ messages in thread
From: Brian Gernhardt @ 2008-07-30 23:03 UTC (permalink / raw)
  To: H Merjin Brand; +Cc: Git List, Lars Noschinski

This message got eaten by a syntax error somewhere.  This is a re-send, sorry for any duplicate messages.

On Jul 30, 2008, at 12:26 PM, H.Merijn Brand wrote:

> On Wed, 30 Jul 2008 11:15:55 -0400, Brian Gernhardt
> <benji@silverinsanity.com> wrote:
> 
> > Then you do something like:
> > 
> > rm -rf module_{a,b,c}/.git # Do this in a test repository, obviously...
> > git add module_a module_b module_c
> > git commit # Needed because '-s ours' uses current HEAD, not index
> 
> So far so good.
> 
> > git merge --no-commit -s ours module_a/master module_b/master module_c/master
> 
> $ git merge --no-commit -s ours fnc/master i00f000/master
> i99f000/master include/master l00m000/master l01f000/master
> l02f000/master l03f000/master l06f000/master l90z000/master
> leerpl/master mutbev/master prtabel/master rpt/master tabellen/master
> zoomen/master Automatic merge went well; stopped before committing as
> requested
> 
> > git commit --amend
> 
> $ git commit --amend
> fatal: You are in the middle of a merge -- cannot amend.

Hm.  I did mention this was completely untested, yes?  The problem comes
from the fact that '-s ours' wants to use HEAD, not the index.  But you
can't amend a normal commit into a merge, apparently.  And I don't think
you want a commit that adds the files and a commit that "does the merge"
as two separate steps.

Well, I don't know how to make the porcelain do this then. But the
plumbing can definitely do it.  Hopefully someone more used to doing
strange things like this can give a simpler recipe, but this should
work.

# First reset to the commit you made with all the modules added.
vim commit-message # Create a merge message
commit=$(git commit-tree HEAD: -p HEAD^ -p module_a/master -p
		module_b/master -p module_c/master < commit-message)
git update-ref HEAD $commit  # Update your current ref

~~ Brian

^ permalink raw reply	[flat|nested] 19+ messages in thread
* Feature suggestion: git-hist
@ 2008-07-30 11:38 H.Merijn Brand
  2008-07-30 13:33 ` Lars Noschinski
  0 siblings, 1 reply; 19+ messages in thread
From: H.Merijn Brand @ 2008-07-30 11:38 UTC (permalink / raw)
  To: git

[-- Attachment #1: Type: text/plain, Size: 6480 bytes --]

I've talked about this with Arjen, and he suggested to put it here.
Please Cc me too, as I have little time to follow this quite busy list.

Suggestion

	Add a new command: 'git-hist' that will show a blame log of a
	single file with each line `tagged' with the most recent tag
	plus the number of changes since that tag.

Relationale.

	Coming from SCCS, each file `keeps' a version in a keyword like
	%R%.%L% which is included in the file when a release is made.
	The unix command 'what' will show all SCCS id's when used on a
	object, like

	% what probev | head -10
	probev:
		$Revision: 92453-07 linker linker crt0.o B.11.60 070209$
		probev.ic       5.27    [07/11/14]
		Make info: HP-UX B.11.00 9000/800; 14 Jul 2008, 14:52; v04.3.6.04:v82BC anrs.ic 5.5     [07/04/10]
		arsmon.ic       5.19    [08/07/09]
		controle.ic     5.40    [2008-03-18]
		goedmut.ic      5.19    [07/05/16]
		gvh.ic  5.8     [06/06/13]
		inw.ic  5.8     [06/06/12]

	All software has bugs, so has ours, and we ship updates, just as
	git makes updates available to the world. I just updated to the
	most recent 1.5.6.4.

	We make our updates available to our customers, but they
	sometimes wait weeks or months to install the updates, but still
	complain about bugs that already have been fixed and for which
	they already received an update.

	I can ask them what version they have, and I can then check if
	the complaint was already addressed in an update that was
	already released. In SCCS this was easy: they tell me the output
	of the what command, I check if the bug was fixed in a newer
	version and the answer is present. No such luck in git, as the
	stamps are (non-sequitive) SHA id's. As we moved to git, we now
	have to update those id's by hand, as the customers are used to
	it. (At least we can now use readable date formats)

Implementation

	Attached is my perl script git-hist, which is how I currently
	use it, which will show the blame log of a file, with each line
	prefixed with the tag plus changes since. So I can tell that if
	the customer runs release version 0.34, the line in question has
	been added before or after.

	* Tag all releases with a version number like 5.10.0 or
5.10.1-RC2
          (give or take the annoying quircks that git refuses some characters
           in tag names, which changed without warning in the 1.5.x track so
           I had to manually rename all my 'v 0.53' tags to loose the space)
        * Count changes since last tag

# git-hist *pm | perl -ne'63..83 and print'
09d4472 2007-12-06 13:25:58                         63:     allow_loose_quotes  => 0,
09d4472 2007-12-06 13:25:58                         64:     allow_loose_escapes => 0,
09d4472 2007-12-06 13:25:58                         65:     allow_whitespace    => 0,
caf4798 2008-02-19 17:56:36 0.34          + 004     66:     blank_is_undef      => 0,
09d4472 2007-12-06 13:25:58                         67:     verbatim            => 0,
09d4472 2007-12-06 13:25:58                         68:     types               => undef,
09d4472 2007-12-06 13:25:58                         69:
8648db0 2008-03-27 18:37:54 0.37          + 002     70:
09d4472 2007-12-06 13:25:58                         71:     _EOF                => 0,
09d4472 2007-12-06 13:25:58                         72:     _STATUS             => undef,
09d4472 2007-12-06 13:25:58                         73:     _FIELDS             => undef,
09d4472 2007-12-06 13:25:58                         74:     _FFLAGS             => undef,
09d4472 2007-12-06 13:25:58                         75:     _STRING             => undef,
09d4472 2007-12-06 13:25:58                         76:     _ERROR_INPUT        => undef,
2b95026 2008-04-04 11:10:09 0.37          + 006     77:     _COLUMN_NAMES       => undef,
ce53d02 2008-04-06 00:40:26 0.37          + 016     78:     _BOUND_COLUMNS      => undef,
09d4472 2007-12-06 13:25:58                         79:     );
caf4798 2008-02-19 17:56:36 0.34          + 004     80: my $last_new_err = "";
09d4472 2007-12-06 13:25:58                         81:
09d4472 2007-12-06 13:25:58                         82: sub new
09d4472 2007-12-06 13:25:58                         83: {

	Or for a perl file

# git-hist xsutils.c | perl -ne'30..50 and print'
02ca0a6 2005-04-21 17:38:30 perl-5.9.2    + 104     30: PERL_XS_EXPORT_C void XS_attributes_bootstrap(pTHX_ CV *cv);
d66c5aa 1999-09-07 19:25:07 perl-5.005    + 1988    31:
d66c5aa 1999-09-07 19:25:07 perl-5.005    + 1988    32:
d66c5aa 1999-09-07 19:25:07 perl-5.005    + 1988    33: /*
d66c5aa 1999-09-07 19:25:07 perl-5.005    + 1988    34:  * Note that only ${pkg}::bootstrap definitions should go here.
d66c5aa 1999-09-07 19:25:07 perl-5.005    + 1988    35:  * This helps keep down the start-up time, which is especially
d66c5aa 1999-09-07 19:25:07 perl-5.005    + 1988    36:  * relevant for users who don't invoke any features which are
d66c5aa 1999-09-07 19:25:07 perl-5.005    + 1988    37:  * (partially) implemented here.
d66c5aa 1999-09-07 19:25:07 perl-5.005    + 1988    38:  *
d66c5aa 1999-09-07 19:25:07 perl-5.005    + 1988    39:  * The various bootstrap definitions can take care of doing
d66c5aa 1999-09-07 19:25:07 perl-5.005    + 1988    40:  * package-specific newXS() calls.  Since the layout of the
2136f35 2000-02-04 05:58:57 perl-5.005    + 2832    41:  * bundled *.pm files is in a version-specific directory,
d66c5aa 1999-09-07 19:25:07 perl-5.005    + 1988    42:  * version checks in these bootstrap calls are optional.
d66c5aa 1999-09-07 19:25:07 perl-5.005    + 1988    43:  */
d66c5aa 1999-09-07 19:25:07 perl-5.005    + 1988    44:
02d011f 2006-05-02 19:46:38 perl-5.9.3    + 950     45: static const char file[] = __FILE__;
02d011f 2006-05-02 19:46:38 perl-5.9.3    + 950     46:
d66c5aa 1999-09-07 19:25:07 perl-5.005    + 1988    47: void
d66c5aa 1999-09-07 19:25:07 perl-5.005    + 1988    48: Perl_boot_core_xsutils(pTHX)
d66c5aa 1999-09-07 19:25:07 perl-5.005    + 1988    49: {
d66c5aa 1999-09-07 19:25:07 perl-5.005    + 1988    50:     newXS("attributes::bootstrap",      XS_attributes_bootstrap,        file);


-- 
H.Merijn Brand          Amsterdam Perl Mongers  http://amsterdam.pm.org/
using & porting perl 5.6.2, 5.8.x, 5.10.x, 5.11.x on HP-UX 10.20, 11.00,
11.11, 11.23, and 11.31, SuSE 10.1, 10.2, and 10.3, AIX 5.2, and Cygwin.
http://mirrors.develooper.com/hpux/           http://www.test-smoke.org/
http://qa.perl.org      http://www.goldmark.org/jeff/stupid-disclaimers/

[-- Attachment #2: git-hist --]
[-- Type: application/octet-stream, Size: 1102 bytes --]

#!/pro/bin/perl

# git-hist file ...
# (c) 2008 H.Merijn Brand for PROCURA B.V.

use strict;
use warnings;

sub pr_time
{
    my @d = @_;
    sprintf "%4d-%02d-%02d %02d:%02d:%02d", 1900 + $d[5], ++$d[4], @d[3,2,1,0];
    } # pr_time

my @hsh;
my %log;
{   local @ARGV = ("git-log --pretty=format:'%h %ct %s' |");
    while (<>) {
	my ($hsh, $time, $text) = (m/^(\S+)\s+([0-9]+)\s+(.*)/);
	push @hsh, $hsh;
	$log{$hsh} = [ "", $text, pr_time localtime $time ];
	}
    }

{   local @ARGV = ("git-show-ref --tags |");
    while (<>) {
	m{(\S{7}).*/(.*)} or next;
	$log{$1}[0] = $2;
	}
    }

{   my $tag = "";
    my $inc;
    foreach my $hsh (reverse @hsh) {
	if ($log{$hsh}[0]) {
	    $tag = $log{$hsh}[0];
	    $inc = "001";
	    }
	elsif ($tag) {
	    $log{$hsh}[0] = sprintf "%-13s + %s", $tag, $inc++;
	    }
	}
    }

foreach my $file (@ARGV) {
    open my $blame, "-|", "git-blame $file" or next;
    while (<$blame>) {
	my ($hsh, $lnr, $txt) =
	    m/^\^?([0-9a-f]{7}).*?\s+([0-9]+)\)(.*)/ or next;
	printf "%.7s %s %-20s %5d:%s\n",
	    $hsh, $log{$hsh}[2], $log{$hsh}[0], $lnr, $txt;
	}
    }

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2008-08-04 14:07 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-30 23:03 Merging submodules (was Re: Feature suggestion: git-hist) Brian Gernhardt
2008-07-31  7:21 ` H.Merijn Brand
2008-07-31 12:39   ` Merging submodules H.Merijn Brand
2008-07-31 13:06     ` Petr Baudis
2008-07-31 15:01       ` H.Merijn Brand
2008-07-31 15:24         ` Santi Béjar
2008-07-31 18:15           ` H.Merijn Brand
2008-07-31 19:03             ` Santi Béjar
2008-07-31 20:44               ` H.Merijn Brand
2008-08-01  7:04               ` H.Merijn Brand
2008-08-01  9:52                 ` Santi Béjar
2008-08-01 10:35                   ` H.Merijn Brand
2008-08-01 11:34                     ` Santi Béjar
2008-08-04 13:24                       ` H.Merijn Brand
2008-08-04 13:40                         ` Petr Baudis
2008-08-04 13:57                           ` H.Merijn Brand
2008-08-04 14:06                             ` Petr Baudis
2008-07-31 13:17     ` Santi Béjar
  -- strict thread matches above, loose matches on Subject: below --
2008-07-30 11:38 Feature suggestion: git-hist H.Merijn Brand
2008-07-30 13:33 ` Lars Noschinski
2008-07-30 13:58   ` H.Merijn Brand
     [not found]     ` <FA2D570A-B2B1-4994-AA6A-9C0C55E69900@silverinsanity.com>
2008-07-30 16:26       ` Merging submodules (was Re: Feature suggestion: git-hist) H.Merijn Brand

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).