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

Re: [PATCH v5 15/16] remote-svn: add marks-file regeneration

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 20, 2012, 23:01 UTC
Message-ID
<7vehn1gocn.fsf@alter.siamese.dyndns.org>
In-Reply-To
<1345499542-15536-16-git-send-email-florian.achleitner.2.6.31@gmail.com>
Florian Achleitner <florian.achleitner.2.6.31@gmail.com> writes:
Show 51 quoted lines
> fast-import mark files are stored outside the object database and are
> therefore not fetched and can be lost somehow else.  marks provide a
> svn revision --> git sha1 mapping, while the notes that are attached
> to each commit when it is imported provide a git sha1 --> svn revision
> mapping.
>
> If the marks file is not available or not plausible, regenerate it by
> walking through the notes tree.  , i.e.  The plausibility check tests
> if the highest revision in the marks file matches the revision of the
> top ref. It doesn't ensure that the mark file is completely correct.
> This could only be done with an effort equal to unconditional
> regeneration.
>
> Signed-off-by: Florian Achleitner <florian.achleitner.2.6.31@gmail.com>
> Signed-off-by: Junio C Hamano <gitster@pobox.com>
> ---
>  remote-testsvn.c |   63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 63 insertions(+)
>
> diff --git a/remote-testsvn.c b/remote-testsvn.c
> index e90d221..2c0dc99 100644
> --- a/remote-testsvn.c
> +++ b/remote-testsvn.c
> @@ -86,6 +86,68 @@ static int parse_rev_note(const char *msg, struct rev_note *res) {
>  	return 0;
>  }
>  
> +static int note2mark_cb(const unsigned char *object_sha1,
> +		const unsigned char *note_sha1, char *note_path,
> +		void *cb_data) {
> +	FILE *file = (FILE *)cb_data;
> +	char *msg;
> +	unsigned long msglen;
> +	enum object_type type;
> +	struct rev_note note;
> +	if (!(msg = read_sha1_file(note_sha1, &type, &msglen)) ||
> +			!msglen || type != OBJ_BLOB) {
> +		free(msg);
> +		return 1;
> +	}
> +	if (parse_rev_note(msg, &note))
> +		return 2;
> +	if (fprintf(file, ":%d %s\n", note.rev_nr, sha1_to_hex(object_sha1)) < 1)
> +		return 3;
> +	return 0;
> +}
> +
> +static void regenerate_marks() {
> +	int ret;
> +	FILE *marksfile;
> +	marksfile = fopen(marksfilename, "w+");
Where does marksfilename come from?  Should this be
	static void regenerate_marks(const char *marksfilename)
	{
Show 22 quoted lines
> +	if (!marksfile)
> +		die_errno("Couldn't create mark file %s.", marksfilename);
> +	ret = for_each_note(NULL, 0, note2mark_cb, marksfile);
> +	if (ret)
> +		die("Regeneration of marks failed, returned %d.", ret);
> +	fclose(marksfile);
> +}
> +
> +static void check_or_regenerate_marks(int latestrev) {
> +	FILE *marksfile;
> +	char *line = NULL;
> +	size_t linelen = 0;
> +	struct strbuf sb = STRBUF_INIT;
> +	int found = 0;
> +
> +	if (latestrev < 1)
> +		return;
> +
> +	init_notes(NULL, notes_ref, NULL, 0);
> +	marksfile = fopen(marksfilename, "r");
> +	if (!marksfile)
> +		regenerate_marks(marksfile);
Huh?  regenerate_marks() take a NULL pointer of type "FILE *"?
I think you meant something like:
	init_notes(NULL, notes_ref, NULL, 0);
        marksfile = fopen(marksfilename, "r");
        if (!marksfile) {
        	regenerate_marks(marksfilename);
                marksfile = fopen(marksfilename, "r");
                if (!marksfile)
	                die("cannot read marks file!");
	} else {
        	...

Also there is another call to regenerate_marks() without any argument. Has this even been compile-tested?

Previous: Florian AchleitnerNext: Junio C Hamano
Message 18 of 24 in “GSOC remote-svn”
  1. 00/16 GSOC remote-svnFlorian Achleitner, Aug 20, 2012
  2. 01/16 Implement a remote helper for svn in CFlorian Achleitner, Aug 20, 2012
  3. 02/16 Add git-remote-testsvn to Makefile.Florian Achleitner, Aug 20, 2012
  4. 03/16 Add svndump_init_fd to allow reading dumps from arbitrary FDsFlorian Achleitner, Aug 20, 2012
  5. 04/16 Add argv_array_detach and argv_array_free_detachedFlorian Achleitner, Aug 20, 2012
  6. 05/16 Connect fast-import to the remote-helper via pipe, adding 'bidi-import' capabilityFlorian Achleitner, Aug 20, 2012
  7. 06/16 Add documentation for the 'bidi-import' capability of remote-helpersFlorian Achleitner, Aug 20, 2012
  8. 07/16 When debug==1, start fast-import with "--stats" instead of "--quiet"Florian Achleitner, Aug 20, 2012
  9. 08/16 remote-svn, vcs-svn: Enable fetching to private refsFlorian Achleitner, Aug 20, 2012
  10. 09/16 Allow reading svn dumps from files via file:// urlsFlorian Achleitner, Aug 20, 2012
  11. 10/16 vcs-svn: add fast_export_note to create notesFlorian Achleitner, Aug 20, 2012
  12. 11/16 Create a note for every imported commit containing svn metadataFlorian Achleitner, Aug 20, 2012
  13. 12/16 remote-svn: Activate import/export-marks for fast-importFlorian Achleitner, Aug 20, 2012
  14. 13/16 remote-svn: add incremental importFlorian Achleitner, Aug 20, 2012
  15. 14/16 Add a svnrdump-simulator replaying a dump file for testingFlorian Achleitner, Aug 20, 2012
  16. 15/16 remote-svn: add marks-file regenerationFlorian Achleitner, Aug 20, 2012
  17. 16/16 Add a test script for remote-svnFlorian Achleitner, Aug 20, 2012
  18. Junio C HamanoAug 20, 2012
  19. Junio C HamanoAug 20, 2012
  20. Florian AchleitnerAug 21, 2012
  21. Florian AchleitnerAug 21, 2012
  22. Junio C HamanoAug 21, 2012
  23. Junio C HamanoAug 20, 2012
  24. Junio C HamanoAug 20, 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.