* Dumb idea on git library for script languages
@ 2008-04-28 7:03 tsgates
2008-04-28 7:31 ` Jakub Narebski
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: tsgates @ 2008-04-28 7:03 UTC (permalink / raw)
To: git
Please comment on my naive idea.
When I try to use git in python, there are no fancy ways not to fork any
processes. (except not active git library) I know it is design policy
of git, one job for one process.
Anyhow, I need to call git in python and perl, so I try to think.
I assumed that
1. all cmd_*() is designed in a process basis,
so it is ok to free all memories which invoked after calling cmd_*()
2. result of cmd_*() is output only
so parse it in order to use in script language
right before call cmd_*() -> redirect stdout to anything
3. 'die()' can be escaped by using "setjmp/longjmp"
4. actually I need only cmd_*() or little low level functions from
script
here is snippets of naive pseudo codes
------------------------------------------------------------
# will be called from the python/perl code
------------------------------------------------------------
lib_git_do() {
if ( setjmp( exterend here ) ) {
start_trace()
cmd_do()
stop_trace()
} else {
# called from die (from longjmp)
return error occured
}
return parse_do();
}
------------------------------------------------------------
start_trace() {
init_mem()
start_malloc_trace()
start_stdout_trace()
}
stop_trace() {
stop_stdout_trace()
stop_malloc_trace()
clean_mem()
}
start_malloc_trace() {
hook __malloc_hook
hook __realloc_hook
hook __free_hook
}
malloc_hook( size ) {
void * rtn = malloc( size )
if ( rtn ) {
add_to_mem_record( thread_id, rtn )
}
}
free_hook( ptr ) {
if ( free( ptr ) ) {
del_mem_record( thread_id, ptr )
}
}
clean_mem() {
for_each ( mem_records )
free( ptr )
}
------------------------------------------------------------
pros
0. easy to implement
1. guarantee thread safety
2. no memory leak
3. not depend on git source
4. able to take advantage of script codes, no forking overhead
cons
0. not fancy
1. need dumb parsing
2. just temporary solution
but, I want to use it in review board or track like system, right now.
If there are any other good suggestions or recommendations on it, please
recommend it.
Best regards
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Dumb idea on git library for script languages
2008-04-28 7:03 Dumb idea on git library for script languages tsgates
@ 2008-04-28 7:31 ` Jakub Narebski
2008-04-28 10:28 ` Johannes Schindelin
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Jakub Narebski @ 2008-04-28 7:31 UTC (permalink / raw)
To: tsgates; +Cc: git
tsgates <tsgatesv@gmail.com> writes:
> When I try to use git in python, there are no fancy ways not to fork any
> processes. (except not active git library) I know it is design policy
> of git, one job for one process.
>
> Anyhow, I need to call git in python and perl, so I try to think.
[...]
> If there are any other good suggestions or recommendations on it, please
> recommend it.
Please take a look at libgit-thin project, which was Google Summer of
Code 2007 project; it was meant to create PyGit, git bindings for
Python. I don't know how far it is/got advanced.
InterfacesFrontendsAndTools page on Git Wiki mentions it.
--
Jakub Narebski
Poland
ShadeHawk on #git
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Dumb idea on git library for script languages
2008-04-28 7:03 Dumb idea on git library for script languages tsgates
2008-04-28 7:31 ` Jakub Narebski
@ 2008-04-28 10:28 ` Johannes Schindelin
2008-04-29 4:06 ` Eric Hanchrow
2008-04-29 4:25 ` Govind Salinas
3 siblings, 0 replies; 5+ messages in thread
From: Johannes Schindelin @ 2008-04-28 10:28 UTC (permalink / raw)
To: tsgates; +Cc: git
Hi,
On Mon, 28 Apr 2008, tsgates wrote:
> malloc_hook( size ) {
> void * rtn = malloc( size )
> if ( rtn ) {
> add_to_mem_record( thread_id, rtn )
> }
> }
>
> free_hook( ptr ) {
> if ( free( ptr ) ) {
> del_mem_record( thread_id, ptr )
> }
> }
>
> clean_mem() {
> for_each ( mem_records )
> free( ptr )
> }
This is not enough. We have quite some static variables which point
directly or indirectly to these allocated regions.
I think you'd need to implement some resetter functions if you were to
libify libgit.a. The easier way would definitely be to go with
libgit-thin, as Jakub suggested.
Ciao,
Dscho
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Dumb idea on git library for script languages
2008-04-28 7:03 Dumb idea on git library for script languages tsgates
2008-04-28 7:31 ` Jakub Narebski
2008-04-28 10:28 ` Johannes Schindelin
@ 2008-04-29 4:06 ` Eric Hanchrow
2008-04-29 4:25 ` Govind Salinas
3 siblings, 0 replies; 5+ messages in thread
From: Eric Hanchrow @ 2008-04-29 4:06 UTC (permalink / raw)
To: git
Look into Python's "subprocess" module; it has all you need to cleanly
invoke subprocesses, capture their output, and check their return
status.
--
It has been suggested that this article or section be merged
into Fried dough. (Discuss)
-- Seen on Wikipedia
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Dumb idea on git library for script languages
2008-04-28 7:03 Dumb idea on git library for script languages tsgates
` (2 preceding siblings ...)
2008-04-29 4:06 ` Eric Hanchrow
@ 2008-04-29 4:25 ` Govind Salinas
3 siblings, 0 replies; 5+ messages in thread
From: Govind Salinas @ 2008-04-29 4:25 UTC (permalink / raw)
To: tsgates; +Cc: git
On Mon, Apr 28, 2008 at 2:03 AM, tsgates <tsgatesv@gmail.com> wrote:
> Please comment on my naive idea.
>
> When I try to use git in python, there are no fancy ways not to fork any
> processes. (except not active git library) I know it is design policy
> of git, one job for one process.
>
> Anyhow, I need to call git in python and perl, so I try to think.
>
You may be interested in Pyrite, which has a Repo class that you may find
helpful. It is a work in progress, so there are probably bugs, but I would
be interested in fixing them. You can find it here
http://gitorious.org/projects/pyrite
Eventually, I plan to use libgit (or libgit-thin depending on what is
appropriate) instead of subprocesses, but that is in the future.
-Govind
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2008-04-29 4:26 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-28 7:03 Dumb idea on git library for script languages tsgates
2008-04-28 7:31 ` Jakub Narebski
2008-04-28 10:28 ` Johannes Schindelin
2008-04-29 4:06 ` Eric Hanchrow
2008-04-29 4:25 ` Govind Salinas
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).