git/list[1] front-page[2] threads[3] people[4] search[5] about
 

RE: Porting git to HP NonStop

From
Joachim Schmitz <jojo@schmitz-digital.de>
Date
Aug 10, 2012, 17:32 UTC
Message-ID
<004701cd771e$21b7cbb0$65276310$@schmitz-digital.de>
In-Reply-To
<CAJo=hJvwih+aOMg6SKP94_1q-az1XV-1Pcf=_fGbvdDcDpC23A@mail.gmail.com>
Show 19 quoted lines
> From: Shawn Pearce [mailto:spearce@spearce.org]
> Sent: Friday, August 10, 2012 6:28 PM
> To: Joachim Schmitz
> Cc: git@vger.kernel.org; rsbecker@nexbridge.com
> Subject: Re: Porting git to HP NonStop
> 
> On Fri, Aug 10, 2012 at 8:04 AM, Joachim Schmitz <jojo@schmitz-digital.de>
> wrote:
> >>
> >> - HP NonStop is lacking poll(), git is making quite some use of it.
> >> My Solution: I 'stole' the implementation from GNUlib, which
> >> implements
> >> poll() using select().
> >> Git should either provide its own poll(), not use it at all or resort
> >> to
> > using
> >> GNUlib, what do you think?.
> 
> poll() is usually better than select() because you don't need to worry
about
> FD_SETSIZE. That said, the compat/ directory contains implementations of
> some functions. You could contribute a fake poll that uses select if it
was under
> the GPLv2.
This is what I did. Just to see now that compat/win32/poll.c has exacly the
same stuff...
 
Show 7 quoted lines
> >> - HP NonStop is lacking getrlimit(), fsync(), setitimer() and memory
> > mapped IO.
> >> For now I've commented out the part that used getrlimit() and use a
> >> home brewed implementation for fsync(), setitimer() and mmap().
> 
> There is no need to define your own mmap(). Define NO_MMAP=1 in the
> Makefile. Git already has its own fake mmap and knows how to write it back
to
> disk when making changes.
Ah, excellent. Esp. as our home brewed implementation is pretty primitive.
Show 8 quoted lines
> >> - git makes use of some C99 features or at least feature that are not
> > availabe in
> >> C89, like 'inline'
> >> C89 is the default compiler on HP NonStop, but we also habe a c99
> > compiler, so
> >> telling configure to search for c99  should help here.
> 
> You could also disable inline by #define inline /**/, but this will
probably result
> in a slower binary.

Even our C99 compiler doesn't inline, it merly recognizes the keyword and then warns about (unable to inline...) But there are other C99 features used too.

Show 5 quoted lines
> >> - HP NonStop doesn't have stat.st_blocks, this is used in
> > builtin/count-objects.c
> >> around line 45, not sure yet how to fix that.
> 
> IIRC the block count is only used to give the user some notion of how much
disk
> was wasted by the repository. You could hack a macro that redefines this
as
> st_size.
OK, thanks, will try that.
Show 8 quoted lines
> >> - HP NonStop doesn't have stat.st_?time.nsec, there are several
> >> places
> > what an
> >> "#ifdef USE_NSEC" is missing, I can provide a diff if needed
> >> (offending
> >> files: builtin/fetch-pack.c and read-cache.c).
> 
> I think this would be appreciated by anyone else that has a similar
problem
> where the platform lacks nsec.
Will do.
 
Show 13 quoted lines
> >> - Once compiled and installed, a simple
> >> jojo@\hpitug:/home/jojo/GitHub $
> > git
> >> clone git://github.com/git/git.git fails with:
> >> /home/jojo/GitHub/git/.git/branches/: No such file or directory After
> > creating
> >> those manually it fails because the directory isn't empty,
> >> catch-22
> >> After some trial'n'error I found that the culprit seems to be the
> > subdirectories
> >> branches, hook and info in /usr/local/share/git-core/templates/, if I
> >> remove/rename those, the above command works fine.
> >> I have no idea why that is nor how to properly fix it, anyone out
there?
> 
> This sounds like the templates directory was not created correctly during
> installation, or is being copied incorrectly during the git init process.
I would
> start by comparing the structure and permissions of the templates
directory on
> your HP NonStop system to one on a Linux system and see if there was a
> mistake made during the installation process. If the directory matches, I
would

jojo@\hpitug:/usr/local/share/git-core/templates $ ls -laR total 41 drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Aug 10 12:10 . drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Aug 10 08:19 .. drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Aug 10 07:26 branches drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Aug 10 07:26 hooks drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Aug 10 07:26 info -rw-r--r-- 1 SUPER.SUPER SUPER 73 Aug 10 07:26 description

./branches: total 16 drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Aug 10 07:26 . drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Aug 10 12:10 ..

./hooks: total 43 drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Aug 10 07:26 . drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Aug 10 12:10 .. -rwxr-xr-x 1 SUPER.SUPER SUPER 452 Aug 10 07:26 applypatch-msg.sample -rwxr-xr-x 1 SUPER.SUPER SUPER 896 Aug 10 07:26 commit-msg.sample -rwxr-xr-x 1 SUPER.SUPER SUPER 189 Aug 10 07:26 post-update.sample -rwxr-xr-x 1 SUPER.SUPER SUPER 398 Aug 10 07:26 pre-applypatch.sample -rwxr-xr-x 1 SUPER.SUPER SUPER 1704 Aug 10 07:26 pre-commit.sample -rwxr-xr-x 1 SUPER.SUPER SUPER 4957 Aug 10 07:26 pre-rebase.sample -rwxr-xr-x 1 SUPER.SUPER SUPER 1251 Aug 10 07:26 prepare-commit-msg.sample -rwxr-xr-x 1 SUPER.SUPER SUPER 3611 Aug 10 07:26 update.sample

./info: total 17 drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Aug 10 07:26 . drwxr-xr-x 1 SUPER.SUPER SUPER 4096 Aug 10 12:10 .. -rw-r--r-- 1 SUPER.SUPER SUPER 240 Aug 10 07:26 exclude jojo@\hpitug:/usr/local/share/git-core/templates $

SUPER.SUPER on NonStop is equivalent to root in UNIX. Everything is readable to everybody. Looks OK to me?

> then use `git init --bare` in a new directory to copy in the templates,
and see if
> its the template copying code that is making an incorrect copy.

"git init --bare" gives the same error. It isn't copying any of the subdirectories, only the file 'description'

Bye, Jojo
Previous: Shawn PearceNext: Shawn Pearce
Message 3 of 39 in “RE: Porting git to HP NonStop”
  1. Joachim SchmitzAug 10, 2012
  2. Shawn PearceAug 10, 2012
  3. Joachim SchmitzAug 10, 2012
  4. Shawn PearceAug 10, 2012
  5. Joachim SchmitzAug 19, 2012
  6. Junio C HamanoAug 19, 2012
  7. Joachim SchmitzAug 20, 2012
  8. Junio C HamanoAug 20, 2012
  9. Joachim SchmitzAug 20, 2012
  10. Junio C HamanoAug 20, 2012
  11. Joachim SchmitzAug 22, 2012
  12. Brandon CaseyAug 22, 2012
  13. Brandon CaseyAug 22, 2012
  14. Joachim SchmitzAug 22, 2012
  15. Brandon CaseyAug 22, 2012
  16. Joachim SchmitzAug 22, 2012
  17. Junio C HamanoAug 22, 2012
  18. Joachim SchmitzAug 22, 2012
  19. Junio C HamanoAug 22, 2012
  20. Joachim SchmitzAug 22, 2012
  21. Johannes SixtAug 22, 2012
  22. Joachim SchmitzAug 22, 2012
  23. Johannes SixtAug 22, 2012
  24. Joachim SchmitzAug 22, 2012
  25. Brandon CaseyAug 22, 2012
  26. Brandon CaseyAug 22, 2012
  27. Junio C HamanoAug 22, 2012
  28. Brandon CaseyAug 22, 2012
  29. Joachim SchmitzAug 22, 2012
  30. Junio C HamanoAug 22, 2012
  31. Joachim SchmitzAug 22, 2012
  32. Junio C HamanoAug 22, 2012
  33. Joachim SchmitzAug 22, 2012
  34. Junio C HamanoAug 22, 2012
  35. Junio C HamanoAug 22, 2012
  36. Joachim SchmitzAug 10, 2012
  37. Johannes SixtAug 11, 2012
  38. Joachim SchmitzAug 14, 2012
  39. Junio C HamanoAug 14, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.