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

Re: [PATCH] add GIT_FAST_STAT mode for Cygwin

From
Dmitry Potapov <dpotapov@gmail.com>
Date
Sep 23, 2008, 16:52 UTC
Message-ID
<20080923165247.GO21650@dpotapov.dyndns.org>
In-Reply-To
<81b0412b0809230737s7498e214w4c58991e79f76507@mail.gmail.com>
On Tue, Sep 23, 2008 at 04:37:14PM +0200, Alex Riesen wrote:
Show 7 quoted lines
> 2008/9/23 Dmitry Potapov <dpotapov@gmail.com>:
> >
> > This fast mode works only for relative paths. It is assumed that the
> > whole repository is located inside one directory without using Cygwin
> > mount to bind external paths inside of the current tree.
> 
> Why runtime conditional? Why conditional at all?

I thought that in rather unusual circumstances (such as using Cygwin mount to connect separately directories in one tree), this fast version may not work. So, I made it conditional. It is runtime conditional, because most users do not build Git themselves but install a ready Cygwin package.

> Why not fallback
> to cygwin's slow stat on absolute pathnames like you do for symlinks?
Of course, I do:
+       if (file_name[0] == '/')
+               return cygstat (file_name, buf);
Sorry, if it was not clear from my above comment.
Show 5 quoted lines
> 
> > +/*
> > + * This are startup stubs, which choose what implementation of lstat/stat
> 
> why do you need two of them? Isn't one not enough?

I did not want to give people reasons to say that I broke lstat :) You can opt for the standard Cygwin version of it if for some reason, this new function does not work. Now, I know only one case -- it is when you use Cygwin mount inside of Git repo. Yet, I don't know enough about Cygwin to be sure that there is no other cases. So, I just wanted to be extra careful and not to break anything.

Show 12 quoted lines
> 
> > +stat_fn_t cygwin_stat_fn = cygwin_stat_choice;
> > +stat_fn_t cygwin_lstat_fn = cygwin_lstat_choice;
> ...
> > +typedef int (*stat_fn_t)(const char*, struct stat*);
> > +extern stat_fn_t cygwin_stat_fn;
> > +extern stat_fn_t cygwin_lstat_fn;
> 
>     extern int (*cygwin_stat_fn)(const char *, struct stat *);
> 
> Is shorter, easier to read and easier to understand (for a C person).
> You don't even use the type anywhere else, it is just for the declaration sake!
I use it in description of a parameter of another function:
static int do_stat(const char *file_name, struct stat *buf, stat_fn_t cygstat)

Of course, you can avoid it here too, but the declaration will become somewhat longer:

static int do_stat(const char *file_name, struct stat *buf,
       int (*cygstat)(const char *, struct stat *));

so I am not sure that removing stat_fn_t improves readability, but if there are other people who think so, I will correct that.

Dmitry
Previous: Alex RiesenNext: Jakub Narebski
Message 3 of 25 in “add GIT_FAST_STAT mode for Cygwin”
  1. add GIT_FAST_STAT mode for CygwinDmitry Potapov, Sep 23, 2008
  2. Alex RiesenSep 23, 2008
  3. Dmitry PotapovSep 23, 2008
  4. Jakub NarebskiSep 23, 2008
  5. Alex RiesenSep 24, 2008
  6. Dmitry PotapovSep 24, 2008
  7. Alex RiesenSep 24, 2008
  8. Shawn O. PearceSep 24, 2008
  9. Alex RiesenSep 24, 2008
  10. Shawn O. PearceSep 24, 2008
  11. Alex RiesenSep 24, 2008
  12. Shawn O. PearceSep 23, 2008
  13. Dmitry PotapovSep 23, 2008
  14. Shawn O. PearceSep 23, 2008
  15. Dmitry PotapovSep 23, 2008
  16. Shawn O. PearceSep 23, 2008
  17. Dmitry PotapovSep 23, 2008
  18. Shawn O. PearceSep 23, 2008
  19. Johannes SixtSep 23, 2008
  20. Dmitry PotapovSep 23, 2008
  21. Johannes SixtSep 23, 2008
  22. Dmitry PotapovSep 23, 2008
  23. Add a "fast stat" mode for CygwinMarcus Griep, Sep 27, 2008
  24. Alex RiesenSep 27, 2008
  25. Dmitry PotapovSep 27, 2008

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.