lkml.org 
[lkml]   [2005]   [Apr]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: Re: Kernel SCM saga..
      Hello,

    Dear diary, on Fri, Apr 08, 2005 at 05:50:21PM CEST, I got a letter
    where Linus Torvalds <torvalds@osdl.org> told me that...
    >
    >
    > On Fri, 8 Apr 2005 ross@jose.lug.udel.edu wrote:
    > >
    > > Here's a partial solution. It does depend on a modified version of
    > > cat-file that behaves like cat. I found it easier to have cat-file
    > > just dump the object indicated on stdout. Trivial patch for that is included.
    >
    > Your trivial patch is trivially incorrect, though. First off, some files
    > may be binary (and definitely are - the "tree" type object contains
    > pathnames, and in order to avoid having to worry about special characters
    > they are NUL-terminated), and your modified "cat-file" breaks that.
    >
    > Secondly, it doesn't check or print the tag.

    FWIW, I made few small fixes (to prevent some trivial usage errors to
    cause cache corruption) and added scripts gitcommit.sh, gitadd.sh and
    gitlog.sh - heavily inspired by what already went through the mailing
    list. Everything is available at http://pasky.or.cz/~pasky/dev/git/
    (including .dircache, even though it isn't shown in the index), the
    cumulative patch can be found below. The scripts aim to provide some
    (obviously very interim) more high-level interface for git.

    I'm now working on tree-diff.c which will (surprise!) produce a diff
    of two trees (I'll finish it after I get some sleep, though), and then I
    will probably do some dwimmy gitdiff.sh wrapper for tree-diff and
    show-diff. At that point I might get my hand on some pull more kind to
    local changes.

    Kind regards,
    Petr Baudis

    diff -ruN git-0.03/gitadd.sh git-devel-clean/gitadd.sh
    --- git-0.03/gitadd.sh 1970-01-01 01:00:00.000000000 +0100
    +++ git-devel-clean/gitadd.sh 2005-04-09 03:17:34.220577000 +0200
    @@ -0,0 +1,13 @@
    +#!/bin/sh
    +#
    +# Add new file to a GIT repository.
    +# Copyright (c) Petr Baudis, 2005
    +#
    +# Takes a list of file names at the command line, and schedules them
    +# for addition to the GIT repository at the next commit.
    +#
    +# FIXME: Those files are omitted from show-diff output!
    +
    +for file in "$@"; do
    + echo $file >>.dircache/add-queue
    +done
    diff -ruN git-0.03/gitcommit.sh git-devel-clean/gitcommit.sh
    --- git-0.03/gitcommit.sh 1970-01-01 01:00:00.000000000 +0100
    +++ git-devel-clean/gitcommit.sh 2005-04-09 03:17:34.220577000 +0200
    @@ -0,0 +1,36 @@
    +#!/bin/sh
    +#
    +# Commit into a GIT repository.
    +# Copyright (c) Petr Baudis, 2005
    +# Based on an example script fragment sent to LKML by Linus Torvalds.
    +#
    +# Ignores any parameters for now, excepts changelog entry on stdin.
    +#
    +# FIXME: Gets it wrong for filenames containing spaces.
    +
    +
    +if [ -r .dircache/add-queue ]; then
    + mv .dircache/add-queue .dircache/add-queue-progress
    + addedfiles=$(cat .dircache/add-queue-progress)
    +else
    + addedfiles=
    +fi
    +changedfiles=$(show-diff -s | grep -v ': ok$' | cut -d : -f 1)
    +commitfiles="$addedfiles $changedfiles"
    +if [ ! "$commitfiles" ]; then
    + echo 'Nothing to commit.' >&2
    + exit
    +fi
    +update-cache $commitfiles
    +rm -f .dircache/add-queue-progress
    +
    +
    +oldhead=$(cat .dircache/HEAD)
    +treeid=$(write-tree)
    +newhead=$(commit-tree $treeid -p $oldhead)
    +
    +if [ "$newhead" ]; then
    + echo $newhead >.dircache/HEAD
    +else
    + echo "Error during commit (oldhead $oldhead, treeid $treeid)" >&2
    +fi
    diff -ruN git-0.03/gitlog.sh git-devel-clean/gitlog.sh
    --- git-0.03/gitlog.sh 1970-01-01 01:00:00.000000000 +0100
    +++ git-devel-clean/gitlog.sh 2005-04-09 04:28:51.227791000 +0200
    @@ -0,0 +1,61 @@
    +#!/bin/sh
    +####
    +#### Call this script with an object and it will produce the change
    +#### information for all the parents of that object
    +####
    +#### This script was originally written by Ross Vandegrift.
    +# multiple parents test 1d0f4aec21e5b66c441213643426c770dc6dedc0
    +# parents: ffa098b2e187b71b86a76d3cd5eb77d074a2503c
    +# 6860e0d9197c7f52155466c225baf39b42d62f63
    +
    +# regex for parent declarations
    +PARENTS="^parent [A-z0-9]{40}$"
    +
    +TMPCL="/tmp/gitlog.$$"
    +
    +# takes an object and generates the object's parent(s)
    +function unpack_parents () {
    + echo "me $1"
    + echo "me $1" >>$TMPCL
    + RENTS=""
    +
    + TMPCM=$(mktemp)
    + cat-file commit $1 >$TMPCM
    + while read line; do
    + if echo "$line" | egrep -q "$PARENTS"; then
    + RENTS="$RENTS "$(echo $line | sed 's/parent //g')
    + fi
    + echo $line
    + done <$TMPCM
    + rm $TMPCM
    +
    + echo -e "\n--------------------------\n"
    +
    + # if the last object had no parents, return
    + if [ ! "$RENTS" ]; then
    + return;
    + fi
    +
    + #useful for testing
    + #echo $RENTS
    + #read
    + for i in `echo $RENTS`; do
    + # break cycles
    + if grep -q "me $i" $TMPCL; then
    + echo "Already visited $i" >&2
    + continue
    + else
    + unpack_parents $i
    + fi
    + done
    +}
    +
    +base=$1
    +if [ ! "$base" ]; then
    + base=$(cat .dircache/HEAD)
    +fi
    +
    +rm -f $TMPCL
    +unpack_parents $base
    +rm -f $TMPCL
    +
    diff -ruN git-0.03/read-cache.c git-devel-clean/read-cache.c
    --- git-0.03/read-cache.c 2005-04-08 22:51:35.000000000 +0200
    +++ git-devel-clean/read-cache.c 2005-04-09 03:53:44.049642000 +0200
    @@ -264,11 +264,12 @@
    size = 0; // avoid gcc warning
    map = (void *)-1;
    if (!fstat(fd, &st)) {
    - map = NULL;
    size = st.st_size;
    errno = EINVAL;
    if (size > sizeof(struct cache_header))
    map = mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0);
    + else
    + return (!hdr->entries) ? 0 : error("inconsistent cache");
    }
    close(fd);
    if (-1 == (int)(long)map)
    diff -ruN git-0.03/show-diff.c git-devel-clean/show-diff.c
    --- git-0.03/show-diff.c 2005-04-08 17:55:09.000000000 +0200
    +++ git-devel-clean/show-diff.c 2005-04-09 03:53:44.063638000 +0200
    @@ -49,9 +49,17 @@

    int main(int argc, char **argv)
    {
    + int silent = 0;
    int entries = read_cache();
    int i;

    + while (argc-- > 1) {
    + if (!strcmp(argv[1], "-s"))
    + silent = 1;
    + else if (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))
    + usage("show-diff [-s]");
    + }
    +
    if (entries < 0) {
    perror("read_cache");
    exit(1);
    @@ -77,6 +85,9 @@
    for (n = 0; n < 20; n++)
    printf("%02x", ce->sha1[n]);
    printf("\n");
    + if (silent)
    + continue;
    +
    new = read_sha1_file(ce->sha1, type, &size);
    show_differences(ce, &st, new, size);
    free(new);
    diff -ruN git-0.03/update-cache.c git-devel-clean/update-cache.c
    --- git-0.03/update-cache.c 2005-04-08 17:53:44.000000000 +0200
    +++ git-devel-clean/update-cache.c 2005-04-09 03:53:44.069637000 +0200
    @@ -231,6 +231,9 @@
    return -1;
    }

    + if (argc < 2)
    + usage("update-cache <file>*");
    +
    newfd = open(".dircache/index.lock", O_RDWR | O_CREAT | O_EXCL, 0600);
    if (newfd < 0) {
    perror("unable to create new cachefile");
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2005-04-09 04:58    [W:2.234 / U:0.972 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site