mirror of
https://github.com/kennethreitz-archive/gitx.git
synced 2026-06-05 23:40:18 +00:00
1f73579993
Use `git config -l -z` to get configs.
126 lines
3.5 KiB
Objective-C
126 lines
3.5 KiB
Objective-C
//
|
|
// PBGitConfig.m
|
|
// GitX
|
|
//
|
|
// Created by Pieter de Bie on 14-10-08.
|
|
// Copyright 2008 Pieter de Bie. All rights reserved.
|
|
//
|
|
|
|
#import "PBGitConfig.h"
|
|
|
|
|
|
@implementation PBGitConfig
|
|
|
|
- init
|
|
{
|
|
repositoryPath = nil;
|
|
return self;
|
|
}
|
|
|
|
- initWithRepositoryPath:(NSString *)path
|
|
{
|
|
repositoryPath = path;
|
|
return self;
|
|
}
|
|
|
|
- (void) writeValue:(NSString *)value forKey:(NSString *)key global:(BOOL)global
|
|
{
|
|
[self willChangeValueForKey:[key substringToIndex:[key rangeOfString:@"."].location]];
|
|
|
|
NSMutableArray *array = [NSMutableArray arrayWithObject:@"config"];
|
|
if (global)
|
|
[array addObject:@"--global"];
|
|
else {
|
|
[array addObject:@"-f"];
|
|
[array addObject:[repositoryPath stringByAppendingPathComponent:@"config"]];
|
|
}
|
|
|
|
[array addObject:key];
|
|
[array addObject:value];
|
|
|
|
int ret;
|
|
[PBEasyPipe outputForCommand:[PBGitBinary path] withArgs:array inDir:nil retValue:&ret];
|
|
if (ret)
|
|
DLog(@"Writing to config file failed!");
|
|
[self didChangeValueForKey:[key substringToIndex:[key rangeOfString:@"."].location]];
|
|
}
|
|
|
|
- valueForKeyPath:(NSString *)path
|
|
{
|
|
NSMutableArray *arguments = [NSMutableArray array];
|
|
if (repositoryPath)
|
|
[arguments addObject:[NSString stringWithFormat:@"--git-dir=%@", repositoryPath]];
|
|
|
|
[arguments addObject:@"config"];
|
|
[arguments addObject:@"--get"];
|
|
[arguments addObject:path];
|
|
|
|
int ret;
|
|
NSString *value = [PBEasyPipe outputForCommand:[PBGitBinary path] withArgs:arguments inDir:nil retValue:&ret];
|
|
|
|
if (ret)
|
|
return nil;
|
|
|
|
return value;
|
|
}
|
|
|
|
- (void) setValue:(id)value forKeyPath:(NSString *)path
|
|
{
|
|
// Check if the config option is local. In that case,
|
|
// write it local
|
|
if (repositoryPath) {
|
|
NSMutableArray *arguments = [NSMutableArray arrayWithObjects:@"config", @"-f", [repositoryPath stringByAppendingPathComponent:@"config"], @"--get", path, nil];
|
|
int ret;
|
|
[PBEasyPipe outputForCommand:[PBGitBinary path] withArgs:arguments inDir:nil retValue:&ret];
|
|
|
|
if (!ret) // it's local
|
|
return [self writeValue:value forKey:path global:NO];
|
|
}
|
|
|
|
// Check if it exists globally. In that case, write it as a global
|
|
|
|
NSArray *arguments = [NSArray arrayWithObjects:@"config", @"--global", @"--get", path, nil];
|
|
int ret;
|
|
[PBEasyPipe outputForCommand:[PBGitBinary path] withArgs:arguments inDir:nil retValue:&ret];
|
|
if (!ret) // It exists globally
|
|
return [self writeValue:value forKey:path global:YES];
|
|
|
|
// It doesn't exist at all. Write it locally.
|
|
[self writeValue:value forKey:path global:NO];
|
|
}
|
|
|
|
/**
|
|
runs `git config -l` returning a dict of key-value pairs from the result
|
|
|
|
passing nil as directory passes '--global' flag
|
|
*/
|
|
- (NSDictionary*) listConfigValuesInDir:(NSString*)inDir
|
|
{
|
|
NSArray* arguments;
|
|
|
|
if (inDir == nil) {
|
|
arguments = [NSArray arrayWithObjects:@"config", @"--global", @"-l", @"-z", nil];
|
|
} else {
|
|
arguments = [NSArray arrayWithObjects:@"config", @"-l", @"-z", nil];
|
|
}
|
|
|
|
int ret = 1;
|
|
NSString* output = [PBEasyPipe outputForCommand:[PBGitBinary path] withArgs:arguments inDir:inDir retValue:&ret];
|
|
NSMutableDictionary *result = [NSMutableDictionary dictionary];
|
|
if (ret==0) {
|
|
NSArray *lines = [output componentsSeparatedByString:@"\0"];
|
|
|
|
for (NSString* line in lines) {
|
|
if([line length] == 0) continue;
|
|
NSRange equalsPos = [line rangeOfString:@"\n"];
|
|
NSString* key = [line substringToIndex:equalsPos.location];
|
|
NSString* value = [line substringFromIndex:equalsPos.location+1];
|
|
[result setObject:value forKey:key];
|
|
}
|
|
}
|
|
|
|
return [NSDictionary dictionaryWithDictionary:result];
|
|
}
|
|
|
|
@end
|