Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Brooooooklyn/simple-git
Simple and fast git helper functions.
https://github.com/Brooooooklyn/simple-git
libgit2 libgit2-library napi napi-rs
Last synced: 19 days ago
JSON representation
Simple and fast git helper functions.
- Host: GitHub
- URL: https://github.com/Brooooooklyn/simple-git
- Owner: Brooooooklyn
- License: mit
- Created: 2022-03-13T17:04:22.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-10-18T22:43:39.000Z (26 days ago)
- Last Synced: 2024-10-21T04:36:29.060Z (24 days ago)
- Topics: libgit2, libgit2-library, napi, napi-rs
- Language: Rust
- Homepage:
- Size: 9.09 MB
- Stars: 157
- Watchers: 3
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# `@napi-rs/simple-git`
![https://github.com/Brooooooklyn/simple-git/actions](https://github.com/Brooooooklyn/simple-git/workflows/CI/badge.svg)
![](https://img.shields.io/npm/dm/@napi-rs/simple-git.svg?sanitize=true)
[![Install size](https://packagephobia.com/badge?p=@napi-rs/simple-git)](https://packagephobia.com/result?p=@napi-rs/simple-git)## `Repository`
### Usage
```ts
import { Repository } from '@napi-rs/simple-git'Repository.init('/path/to/repo') // init a git repository
const repo = new Repository('/path/to/repo') // Open an existed repo
const timestamp = new Date(repo.getFileLatestModifiedDate('build.rs')) // get the latest modified timestamp of a `build.rs`
console.log(timestamp) // 2022-03-13T12:47:47.920Zconst timestampFromAsync = new Date(await repo.getFileLatestModifiedDateAsync('build.rs')) // Async version of `getFileLatestModifiedDate`
console.log(timestamp) // 2022-03-13T12:47:47.920Z
```### API
```ts
export class Repository {
static init(p: string): Repository
constructor(gitDir: string)
/** Retrieve and resolve the reference pointed at by HEAD. */
head(): Reference
getFileLatestModifiedDate(filepath: string): number
getFileLatestModifiedDateAsync(filepath: string, signal?: AbortSignal | undefined | null): Promise
}
```## `Reference`
### Usage
```ts
import { Repository } from '@napi-rs/simple-git'const repo = new Repository('/path/to/repo') // Open an existed repo
const headReference = repo.head()
headReference.shorthand() // 'main'
headReference.name() // 'refs/heads/main'
headReference.target() // 7a1256e2f847f395219980bc06c6dadf0148f18d
```### API
```ts
/** An enumeration of all possible kinds of references. */
export const enum ReferenceType {
/** A reference which points at an object id. */
Direct = 0,
/** A reference which points at another reference. */
Symbolic = 1,
Unknown = 2
}
export class Reference {
/**
* Ensure the reference name is well-formed.
*
* Validation is performed as if [`ReferenceFormat::ALLOW_ONELEVEL`]
* was given to [`Reference.normalize_name`]. No normalization is
* performed, however.
*
* ```ts
* import { Reference } from '@napi-rs/simple-git'
*
* console.assert(Reference.is_valid_name("HEAD"));
* console.assert(Reference.is_valid_name("refs/heads/main"));
*
* // But:
* console.assert(!Reference.is_valid_name("main"));
* console.assert(!Reference.is_valid_name("refs/heads/*"));
* console.assert(!Reference.is_valid_name("foo//bar"));
* ```
*/
static isValidName(name: string): boolean
/** Check if a reference is a local branch. */
isBranch(): boolean
/** Check if a reference is a note. */
isNote(): boolean
/** Check if a reference is a remote tracking branch */
isRemote(): boolean
/** Check if a reference is a tag */
isTag(): boolean
kind(): ReferenceType
/**
* Get the full name of a reference.
*
* Returns `None` if the name is not valid utf-8.
*/
name(): string | undefined | null
/**
* Get the full shorthand of a reference.
*
* This will transform the reference name into a name "human-readable"
* version. If no shortname is appropriate, it will return the full name.
*
* Returns `None` if the shorthand is not valid utf-8.
*/
shorthand(): string | undefined | null
/**
* Get the OID pointed to by a direct reference.
*
* Only available if the reference is direct (i.e. an object id reference,
* not a symbolic one).
*/
target(): string | undefined | null
/**
* Return the peeled OID target of this reference.
*
* This peeled OID only applies to direct references that point to a hard
* Tag object: it is the result of peeling such Tag.
*/
targetPeel(): string | undefined | null
/**
* Get full name to the reference pointed to by a symbolic reference.
*
* May return `None` if the reference is either not symbolic or not a
* valid utf-8 string.
*/
symbolicTarget(): string | undefined | null
}
```## Performance
Compared with the `exec` function, which gets the file's latest modified date by spawning a child process. Getting the latest modified date from the file 1000 times:
```
Child process took 1.9s
@napi-rs/simple-git took 65ms
```