forked from msysgit/git
-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
reftable: add error related functionality
The reftable/ directory is structured as a library, so it cannot crash on misuse. Instead, it returns an error code. In addition to signaling errors, the error code can be used to signal conditions from lower levels of the library to be handled by higher levels of the library. For example, in a transaction we might legitimately write an empty reftable file, but in that case, we want to shortcut the transaction. Signed-off-by: Han-Wen Nienhuys <hanwen@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
Showing
2 changed files
with
103 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
/* | ||
Copyright 2020 Google LLC | ||
Use of this source code is governed by a BSD-style | ||
license that can be found in the LICENSE file or at | ||
https://developers.google.com/open-source/licenses/bsd | ||
*/ | ||
|
||
#include "reftable-error.h" | ||
|
||
#include <stdio.h> | ||
|
||
const char *reftable_error_str(int err) | ||
{ | ||
static char buf[250]; | ||
switch (err) { | ||
case REFTABLE_IO_ERROR: | ||
return "I/O error"; | ||
case REFTABLE_FORMAT_ERROR: | ||
return "corrupt reftable file"; | ||
case REFTABLE_NOT_EXIST_ERROR: | ||
return "file does not exist"; | ||
case REFTABLE_LOCK_ERROR: | ||
return "data is outdated"; | ||
case REFTABLE_API_ERROR: | ||
return "misuse of the reftable API"; | ||
case REFTABLE_ZLIB_ERROR: | ||
return "zlib failure"; | ||
case REFTABLE_NAME_CONFLICT: | ||
return "file/directory conflict"; | ||
case REFTABLE_EMPTY_TABLE_ERROR: | ||
return "wrote empty table"; | ||
case REFTABLE_REFNAME_ERROR: | ||
return "invalid refname"; | ||
case -1: | ||
return "general error"; | ||
default: | ||
snprintf(buf, sizeof(buf), "unknown error code %d", err); | ||
return buf; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
/* | ||
Copyright 2020 Google LLC | ||
Use of this source code is governed by a BSD-style | ||
license that can be found in the LICENSE file or at | ||
https://developers.google.com/open-source/licenses/bsd | ||
*/ | ||
|
||
#ifndef REFTABLE_ERROR_H | ||
#define REFTABLE_ERROR_H | ||
|
||
/* | ||
* Errors in reftable calls are signaled with negative integer return values. 0 | ||
* means success. | ||
*/ | ||
enum reftable_error { | ||
/* Unexpected file system behavior */ | ||
REFTABLE_IO_ERROR = -2, | ||
|
||
/* Format inconsistency on reading data */ | ||
REFTABLE_FORMAT_ERROR = -3, | ||
|
||
/* File does not exist. Returned from block_source_from_file(), because | ||
* it needs special handling in stack. | ||
*/ | ||
REFTABLE_NOT_EXIST_ERROR = -4, | ||
|
||
/* Trying to write out-of-date data. */ | ||
REFTABLE_LOCK_ERROR = -5, | ||
|
||
/* Misuse of the API: | ||
* - on writing a record with NULL refname. | ||
* - on writing a reftable_ref_record outside the table limits | ||
* - on writing a ref or log record before the stack's | ||
* next_update_inde*x | ||
* - on writing a log record with multiline message with | ||
* exact_log_message unset | ||
* - on reading a reftable_ref_record from log iterator, or vice versa. | ||
* | ||
* When a call misuses the API, the internal state of the library is | ||
* kept unchanged. | ||
*/ | ||
REFTABLE_API_ERROR = -6, | ||
|
||
/* Decompression error */ | ||
REFTABLE_ZLIB_ERROR = -7, | ||
|
||
/* Wrote a table without blocks. */ | ||
REFTABLE_EMPTY_TABLE_ERROR = -8, | ||
|
||
/* Dir/file conflict. */ | ||
REFTABLE_NAME_CONFLICT = -9, | ||
|
||
/* Invalid ref name. */ | ||
REFTABLE_REFNAME_ERROR = -10, | ||
}; | ||
|
||
/* convert the numeric error code to a string. The string should not be | ||
* deallocated. */ | ||
const char *reftable_error_str(int err); | ||
|
||
#endif |