[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/nodegit/nodegit/v0.0.3/src/object.cc [Back]  [Original]

/*
Copyright (c) 2011, Tim Branyen @tbranyen 
*/

#include 
#include 
#include 

#include "../vendor/libgit2/include/git2.h"

#include "../include/object.h"
#include "../include/repo.h"
#include "../include/oid.h"

using namespace v8;
using namespace node;

void GitObject::Initialize (Handle target) {
  HandleScope scope;

  Local t = FunctionTemplate::New(New);
  
  constructor_template = Persistent::New(t);
  constructor_template->InstanceTemplate()->SetInternalFieldCount(1);
  constructor_template->SetClassName(String::NewSymbol("Object"));

  NODE_SET_PROTOTYPE_METHOD(constructor_template, "id", Id);
  NODE_SET_PROTOTYPE_METHOD(constructor_template, "type", Type);
  NODE_SET_PROTOTYPE_METHOD(constructor_template, "owner", Owner);
  NODE_SET_PROTOTYPE_METHOD(constructor_template, "type2String", Type2String);
  NODE_SET_PROTOTYPE_METHOD(constructor_template, "string2Type", String2Type);
  NODE_SET_PROTOTYPE_METHOD(constructor_template, "typeIsLoose", TypeIsLoose);
  NODE_SET_PROTOTYPE_METHOD(constructor_template, "size", Size);

  Local type = Object::New();

  type->Set(String::New("ANY"), Integer::New(-2));
  type->Set(String::New("BAD"), Integer::New(-1));
  type->Set(String::New("_EXT1"), Integer::New(0));
  type->Set(String::New("COMMIT"), Integer::New(1));
  type->Set(String::New("TREE"), Integer::New(2));
  type->Set(String::New("BLOB"), Integer::New(3));
  type->Set(String::New("TAG"), Integer::New(4));
  type->Set(String::New("_EXT2"), Integer::New(5));
  type->Set(String::New("OFS_DELTA"), Integer::New(6));
  type->Set(String::New("REF_DELTA"), Integer::New(7));

  constructor_template->Set(String::New("type"), type);

  target->Set(String::NewSymbol("Object"), constructor_template->GetFunction());
}

git_object* GitObject::GetValue() {
  return this->obj;
}

void GitObject::SetValue(git_object* obj) {
  this->obj = obj;
}

const git_oid* GitObject::Id() {
  return git_object_id(this->obj);
}

git_otype GitObject::Type() {
  return git_object_type(this->obj);
}

git_repository* GitObject::Owner() {
  return git_object_owner(this->obj);
}

const char* GitObject::Type2String(git_otype type) {
  return git_object_type2string(type);
}

git_otype GitObject::String2Type(const char* type) {
  return git_object_string2type(type);
}

int GitObject::TypeIsLoose(git_otype type) {
  return git_object_typeisloose(type);
}

size_t GitObject::Size(git_otype type) {
  return git_object__size(type);
}

Handle GitObject::New(const Arguments& args) {
  HandleScope scope;

  GitObject *obj = new GitObject();

  obj->Wrap(args.This());

  return args.This();
}

Handle GitObject::Id(const Arguments& args) {
  HandleScope scope;

  GitObject *obj = ObjectWrap::Unwrap(args.This());
  
  if(args.Length() == 0 || !args[0]->IsObject()) {
    return ThrowException(Exception::Error(String::New("Oid is required and must be an Object.")));
  }

  GitOid *oid = ObjectWrap::Unwrap(args[0]->ToObject());

  oid->SetValue(*const_cast(obj->Id()));

  return Undefined();
}

Handle GitObject::Type(const Arguments& args) {
  HandleScope scope;

  GitObject *obj = ObjectWrap::Unwrap(args.This());
  
  return Integer::New(obj->Type());
}

Handle GitObject::Owner(const Arguments& args) {
  HandleScope scope;

  GitObject *obj = ObjectWrap::Unwrap(args.This());
  
  if(args.Length() == 0 || !args[0]->IsObject()) {
    return ThrowException(Exception::Error(String::New("Repo is required and must be an Object.")));
  }

  GitRepo *repo = ObjectWrap::Unwrap(args[0]->ToObject());

  repo->SetValue(obj->Owner());

  return Undefined();
}

Handle GitObject::Type2String(const Arguments& args) {
  HandleScope scope;

  GitObject *obj = ObjectWrap::Unwrap(args.This());
  
  if(args.Length() == 0 || !args[0]->IsNumber()) {
    return ThrowException(Exception::Error(String::New("Type is required and must be a Number.")));
  }

  git_otype type = (git_otype)args[0]->ToInteger()->Value();

  return String::New(obj->Type2String(type));
}

Handle GitObject::String2Type(const Arguments& args) {
  HandleScope scope;

  GitObject *obj = ObjectWrap::Unwrap(args.This());
  
  if(args.Length() == 0 || !args[0]->IsString()) {
    return ThrowException(Exception::Error(String::New("Type is required and must be a String.")));
  }

  String::Utf8Value type(args[0]);

  return Integer::New(obj->String2Type(*type));
}

Handle GitObject::TypeIsLoose(const Arguments& args) {
  HandleScope scope;

  GitObject *obj = ObjectWrap::Unwrap(args.This());
  
  if(args.Length() == 0 || !args[0]->IsNumber()) {
    return ThrowException(Exception::Error(String::New("Type is required and must be a Number.")));
  }

  git_otype type = (git_otype)args[0]->ToInteger()->Value();

  return Integer::New(obj->TypeIsLoose(type));
}

Handle GitObject::Size(const Arguments& args) {
  HandleScope scope;

  GitObject *obj = ObjectWrap::Unwrap(args.This());
  
  if(args.Length() == 0 || !args[0]->IsNumber()) {
    return ThrowException(Exception::Error(String::New("Type is required and must be a Number.")));
  }

  git_otype type = (git_otype)args[0]->ToInteger()->Value();

  return Integer::New(obj->Size(type));
}

Persistent GitObject::constructor_template;

Web Proxy Viewer  |  New URL  |  Original Page