diff options
| author | Vicent Marti <tanoku@gmail.com> | 2011-03-18 19:38:49 +0200 | 
|---|---|---|
| committer | Vicent Marti <tanoku@gmail.com> | 2011-03-20 21:45:11 +0200 | 
| commit | 72a3fe42fb7208712bbe8f0981f4c6274c05e9c3 (patch) | |
| tree | b073a1c36b3215d94b1e78a0f294d7aa30d949df /include/git2/commit.h | |
| parent | bb3de0c472b2d5d6b8091c190bee3db79c4b5e27 (diff) | |
| download | libgit2-72a3fe42fb7208712bbe8f0981f4c6274c05e9c3.tar.gz | |
I broke your bindings
Hey. Apologies in advance -- I broke your bindings.
This is a major commit that includes a long-overdue redesign of the
whole object-database structure. This is expected to be the last major
external API redesign of the library until the first non-alpha release.
Please get your bindings up to date with these changes. They will be
included in the next minor release. Sorry again!
Major features include:
	- Real caching and refcounting on parsed objects
	- Real caching and refcounting on objects read from the ODB
	- Streaming writes & reads from the ODB
	- Single-method writes for all object types
	- The external API is now partially thread-safe
The speed increases are significant in all aspects, specially when
reading an object several times from the ODB (revwalking) and when
writing big objects to the ODB.
Here's a full changelog for the external API:
blob.h
------
	- Remove `git_blob_new`
	- Remove `git_blob_set_rawcontent`
	- Remove `git_blob_set_rawcontent_fromfile`
	- Rename `git_blob_writefile` -> `git_blob_create_fromfile`
	- Change `git_blob_create_fromfile`:
		The `path` argument is now relative to the repository's working dir
	- Add `git_blob_create_frombuffer`
commit.h
--------
	- Remove `git_commit_new`
	- Remove `git_commit_add_parent`
	- Remove `git_commit_set_message`
	- Remove `git_commit_set_committer`
	- Remove `git_commit_set_author`
	- Remove `git_commit_set_tree`
	- Add `git_commit_create`
	- Add `git_commit_create_v`
	- Add `git_commit_create_o`
	- Add `git_commit_create_ov`
tag.h
-----
	- Remove `git_tag_new`
	- Remove `git_tag_set_target`
	- Remove `git_tag_set_name`
	- Remove `git_tag_set_tagger`
	- Remove `git_tag_set_message`
	- Add `git_tag_create`
	- Add `git_tag_create_o`
tree.h
------
	- Change `git_tree_entry_2object`:
		New signature is `(git_object **object_out, git_repository *repo, git_tree_entry *entry)`
	- Remove `git_tree_new`
	- Remove `git_tree_add_entry`
	- Remove `git_tree_remove_entry_byindex`
	- Remove `git_tree_remove_entry_byname`
	- Remove `git_tree_clearentries`
	- Remove `git_tree_entry_set_id`
	- Remove `git_tree_entry_set_name`
	- Remove `git_tree_entry_set_attributes`
object.h
------------
	- Remove `git_object_new
	- Remove `git_object_write`
	- Change `git_object_close`:
		This method is now *mandatory*. Not closing an object causes a
		memory leak.
odb.h
-----
	- Remove type `git_rawobj`
	- Remove `git_rawobj_close`
	- Rename `git_rawobj_hash` -> `git_odb_hash`
	- Change `git_odb_hash`:
		New signature is `(git_oid *id, const void *data, size_t len, git_otype type)`
	- Add type `git_odb_object`
	- Add `git_odb_object_close`
	- Change `git_odb_read`:
		New signature is `(git_odb_object **out, git_odb *db, const git_oid *id)`
	- Change `git_odb_read_header`:
		New signature is `(size_t *len_p, git_otype *type_p, git_odb *db, const git_oid *id)`
	- Remove `git_odb_write`
	- Add `git_odb_open_wstream`
	- Add `git_odb_open_rstream`
odb_backend.h
-------------
	- Change type `git_odb_backend`:
		New internal signatures are as follows
			int (* read)(void **, size_t *, git_otype *, struct git_odb_backend *, const git_oid *)
			int (* read_header)(size_t *, git_otype *, struct git_odb_backend *, const git_oid *)
			int (* writestream)(struct git_odb_stream **, struct git_odb_backend *, size_t, git_otype)
			int (* readstream)( struct git_odb_stream **, struct git_odb_backend *, const git_oid *)
	- Add type `git_odb_stream`
	- Add enum `git_odb_streammode`
Signed-off-by: Vicent Marti <tanoku@gmail.com>
Diffstat (limited to 'include/git2/commit.h')
| -rw-r--r-- | include/git2/commit.h | 159 | 
1 files changed, 118 insertions, 41 deletions
| diff --git a/include/git2/commit.h b/include/git2/commit.h index 1556e52b1..ba18a5b39 100644 --- a/include/git2/commit.h +++ b/include/git2/commit.h @@ -41,8 +41,6 @@ GIT_BEGIN_DECL  /**   * Lookup a commit object from a repository. - * The generated commit object is owned by the revision - * repo and shall not be freed by the user.   *   * @param commit pointer to the looked up commit   * @param repo the repo to use when locating the commit. @@ -56,23 +54,8 @@ GIT_INLINE(int) git_commit_lookup(git_commit **commit, git_repository *repo, con  }  /** - * Create a new in-memory git_commit. - * - * The commit object must be manually filled using - * setter methods before it can be written to its - * repository. - * - * @param commit pointer to the new commit - * @param repo The repository where the object will reside - * @return 0 on success; error code otherwise - */ -GIT_INLINE(int) git_commit_new(git_commit **commit, git_repository *repo) -{ -	return git_object_new((git_object **)commit, repo, GIT_OBJ_COMMIT); -} - -/**   * Get the id of a commit. + *   * @param commit a previously loaded commit.   * @return object identity for the commit.   */ @@ -80,6 +63,7 @@ GIT_EXTERN(const git_oid *) git_commit_id(git_commit *commit);  /**   * Get the short (one line) message of a commit. + *   * @param commit a previously loaded commit.   * @return the short message of a commit   */ @@ -87,6 +71,7 @@ GIT_EXTERN(const char *) git_commit_message_short(git_commit *commit);  /**   * Get the full message of a commit. + *   * @param commit a previously loaded commit.   * @return the message of a commit   */ @@ -94,6 +79,7 @@ GIT_EXTERN(const char *) git_commit_message(git_commit *commit);  /**   * Get the commit time (i.e. committer time) of a commit. + *   * @param commit a previously loaded commit.   * @return the time of a commit   */ @@ -101,6 +87,7 @@ GIT_EXTERN(time_t) git_commit_time(git_commit *commit);  /**   * Get the commit timezone offset (i.e. committer's preferred timezone) of a commit. + *   * @param commit a previously loaded commit.   * @return positive or negative timezone offset, in minutes from UTC   */ @@ -108,6 +95,7 @@ GIT_EXTERN(int) git_commit_time_offset(git_commit *commit);  /**   * Get the committer of a commit. + *   * @param commit a previously loaded commit.   * @return the committer of a commit   */ @@ -115,6 +103,7 @@ GIT_EXTERN(const git_signature *) git_commit_committer(git_commit *commit);  /**   * Get the author of a commit. + *   * @param commit a previously loaded commit.   * @return the author of a commit   */ @@ -122,6 +111,7 @@ GIT_EXTERN(const git_signature *) git_commit_author(git_commit *commit);  /**   * Get the tree pointed to by a commit. + *   * @param tree_out pointer where to store the tree object   * @param commit a previously loaded commit.   * @return 0 on success; error code otherwise @@ -146,42 +136,129 @@ GIT_EXTERN(unsigned int) git_commit_parentcount(git_commit *commit);   */  GIT_EXTERN(int) git_commit_parent(git_commit **parent, git_commit *commit, unsigned int n); +  /** - * Add a new parent commit to an existing commit - * @param commit the commit object - * @param new_parent the new commit which will be a parent + * Create a new commit in the repository + * + * + * @param oid Pointer where to store the OID of the + *	newly created commit + * + * @param repo Repository where to store the commit + * + * @param update_ref If not NULL, name of the reference that + *	will be updated to point to this commit. If the reference + *	is not direct, it will be resolved to a direct reference. + *	Use "HEAD" to update the HEAD of the current branch and + *	make it point to this commit + * + * @param author Signature representing the author and the authory + *	time of this commit + * + * @param committer Signature representing the committer and the + *  commit time of this commit + * + * @param message Full message for this commit + * + * @param tree_oid Object ID of the tree for this commit. Note that + *  no validation is performed on this OID. Use the _o variants of + *  this method to assure a proper tree is passed to the commit. + * + * @param parent_count Number of parents for this commit + * + * @param parents Array of pointers to parent OIDs for this commit. + *	Note that no validation is performed on these OIDs. Use the _o + *	variants of this method to assure that are parents for the commit + *	are proper objects. + *   * @return 0 on success; error code otherwise + *	The created commit will be written to the Object Database and + *	the given reference will be updated to point to it   */ -GIT_EXTERN(int) git_commit_add_parent(git_commit *commit, git_commit *new_parent); +GIT_EXTERN(int) git_commit_create( +		git_oid *oid, +		git_repository *repo, +		const char *update_ref, +		const git_signature *author, +		const git_signature *committer, +		const char *message, +		const git_oid *tree_oid, +		int parent_count, +		const git_oid *parent_oids[]);  /** - * Set the message of a commit - * @param commit the commit object - * @param message the new message + * Create a new commit in the repository using `git_object` + * instances as parameters. + * + * The `tree_oid` and `parent_oids` paremeters now take a instance + * of `git_tree` and `git_commit`, respectively. + * + * All other parameters remain the same + * + * @see git_commit_create   */ -GIT_EXTERN(void) git_commit_set_message(git_commit *commit, const char *message); +GIT_EXTERN(int) git_commit_create_o( +		git_oid *oid, +		git_repository *repo, +		const char *update_ref, +		const git_signature *author, +		const git_signature *committer, +		const char *message, +		const git_tree *tree, +		int parent_count, +		const git_commit *parents[]);  /** - * Set the committer of a commit - * @param commit the commit object - * @param author_sig signature of the committer + * Create a new commit in the repository using `git_object` + * instances and a variable argument list. + * + * The `tree_oid` paremeter now takes a instance + * of `const git_tree *`. + * + * The parents for the commit are specified as a variable + * list of pointers to `const git_commit *`. Note that this + * is a convenience method which may not be safe to export + * for certain languages or compilers + * + * All other parameters remain the same + * + * @see git_commit_create   */ -GIT_EXTERN(void) git_commit_set_committer(git_commit *commit, const git_signature *committer_sig); +GIT_EXTERN(int) git_commit_create_ov( +		git_oid *oid, +		git_repository *repo, +		const char *update_ref, +		const git_signature *author, +		const git_signature *committer, +		const char *message, +		const git_tree *tree, +		int parent_count, +		...); -/** - * Set the author of a commit - * @param commit the commit object - * @param author_sig signature of the author - */ -GIT_EXTERN(void) git_commit_set_author(git_commit *commit, const git_signature *author_sig);  /** - * Set the tree which is pointed to by a commit - * @param commit the commit object - * @param tree the new tree - * @param 0 on success; error code otherwise + * Create a new commit in the repository using  + * a variable argument list. + * + * The parents for the commit are specified as a variable + * list of pointers to `const git_oid *`. Note that this + * is a convenience method which may not be safe to export + * for certain languages or compilers + * + * All other parameters remain the same + * + * @see git_commit_create   */ -GIT_EXTERN(int) git_commit_set_tree(git_commit *commit, git_tree *tree); +GIT_EXTERN(int) git_commit_create_v( +		git_oid *oid, +		git_repository *repo, +		const char *update_ref, +		const git_signature *author, +		const git_signature *committer, +		const char *message, +		const git_oid *tree_oid, +		int parent_count, +		...);  /** @} */  GIT_END_DECL | 
